我对递归函数中增加值的功能有疑问。
当我使用时:
counter++
不起作用
但是当我使用counter + 1
时,它正常工作。
我还找到了另一种工作方式:++counter
,但我真的不明白在柜台前使用++
会有什么不同。
示例:
printEachName = (companyNames, newPeople, counter, callback) => {
if (companyNames.length === newPeople.length) {
return callback(false, companyNames);
}
console.log('counter >>> ', counter);
let newP = newPeople[counter];
companyNames.push(newP.name);
printEachName(companyNames, newPeople, counter + 1, callback);
}
printEachName([], newPeople, 0, (errorPrinting, response) => {
if (errorPrinting) {
//res.send()
return;
}
console.log('response is >>> ', response);
});
答案 0 :(得分:5)
试试++counter
。使用prefix increment operator将首先递增变量,然后将其传递给函数。请注意,这与counter + 1
不同,后者不更改其值。
答案 1 :(得分:3)
这是因为counter++
,++counter
和counter + 1
是完全不同的三件事。
用例子说明:
function f(n) { console.log(n); }
var counter = 0;
// Call f(counter) and then increment counter after
f(counter++);
// log: 0
// counter: 1
// Increment counter and then call f(counter)
f(++counter);
// log: 2
// counter: 2
// Call f() with the value counter+1, do not alter counter
f(counter + 1);
// log: 3
// counter: 2
+ 1
方法有效,因为您正确地将递增的值提供给函数调用。前缀增量也可以,但由于counter
没有在其他任何地方使用,这只会使事情过于复杂。后缀版本永远不会起作用。
答案 2 :(得分:1)
这可能已经得到了解答,但a++
取值a
并使用然后增加值。另一方面,++a
首先递增a
的值,然后使用递增的值(在您的特定示例中等效于a + 1
)。
答案 3 :(得分:1)
在
printEachName(companyNames, newPeople, counter++, callback);
计数器的值在执行printEachName()后更新。
而在
printEachName(companyNames, newPeople, ++counter, callback);
计数器的值立即更新,即使在实际执行printEachName()之前也是如此。
但是当你使用
时printEachName(companyNames, newPeople, counter + 1, callback);
然后计数器的值根本没有更新。但是计数器+ 1作为参数传递给函数。
答案 4 :(得分:1)
只是为了添加其他人的解释
counter++
等同于此
temp = counter, counter = counter + 1, temp
你可以在这里试试看
var counter1 = 123;
var foo1 = counter1++;
console.log("counter1:", counter1, "foo1:", foo1);
var counter2 = 123;
var foo2 = (temp = counter2, counter2 = counter2 + 1, temp);
console.log("counter2:", counter2, "foo2:", foo2);

variable++
是一个后期增量。换句话说,返回变量中的值,然后增量。
如果你真的只想增加你,可以说是使用++variable