在递归函数中使用计数器

时间:2017-11-18 04:27:52

标签: javascript recursion

我对递归函数中增加值的功能有疑问。

当我使用时:

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);
});

5 个答案:

答案 0 :(得分:5)

试试++counter。使用prefix increment operator将首先递增变量,然后将其传递给函数。请注意,这与counter + 1不同,后者更改其值。

答案 1 :(得分:3)

这是因为counter++++countercounter + 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