为什么 count++ 在作为参数传递时不起作用
Why does count++ not work when being passed as an argument
我有下面的代码。如果您向代码传递一个列表,它将提供该位置的值(它是零索引的)。此代码有效,但如果我将 count = count + 1 替换为 count++ (在条件的最后一个分支中),它不再有效。有人可以帮我理解为什么吗?
注意:如果你这样调用函数:
var list = {value: 10, rest: {value: 10, rest: {value: 30, rest: null}}}
nth(list, 1)
输出应该是20。
function nth(list, index, count) {
if (count === undefined) {
count = 0;
}
if (count === index) {
return list.value;
}
else if (list.rest === null) {
return undefined;
}
else {
// note that count++ will not work here
return nth(list.rest, index, count = count + 1);
}
}
这是因为
count++
是后缀增量。这意味着它创建一个新值,即旧计数,并将该值传递给函数。
你想要前缀。
++count.
努力改变,
return nth(list.rest, index, count = count + 1);
至
return nth(list.rest, index, ++count);
我有下面的代码。如果您向代码传递一个列表,它将提供该位置的值(它是零索引的)。此代码有效,但如果我将 count = count + 1 替换为 count++ (在条件的最后一个分支中),它不再有效。有人可以帮我理解为什么吗?
注意:如果你这样调用函数:
var list = {value: 10, rest: {value: 10, rest: {value: 30, rest: null}}}
nth(list, 1)
输出应该是20。
function nth(list, index, count) {
if (count === undefined) {
count = 0;
}
if (count === index) {
return list.value;
}
else if (list.rest === null) {
return undefined;
}
else {
// note that count++ will not work here
return nth(list.rest, index, count = count + 1);
}
}
这是因为
count++
是后缀增量。这意味着它创建一个新值,即旧计数,并将该值传递给函数。
你想要前缀。
++count.
努力改变,
return nth(list.rest, index, count = count + 1);
至
return nth(list.rest, index, ++count);