Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归函数中的递增计数器_Javascript_Recursion - Fatal编程技术网

Javascript 递归函数中的递增计数器

Javascript 递归函数中的递增计数器,javascript,recursion,Javascript,Recursion,我有一个关于递归函数中增加值的功能的问题 当我使用: 计数器+++不工作 但是当我使用计数器+1时,它工作正常 我还找到了另一种工作方式:++counter,但我真的不明白在计数器前面使用++有什么区别 例如: printEachName = (companyNames, newPeople, counter, callback) => { if (companyNames.length === newPeople.length) { return callback(false

我有一个关于递归函数中增加值的功能的问题

当我使用:

计数器+++
不工作

但是当我使用
计数器+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);
});

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

这可能已经得到了回答,但
a++
会获取值
a
并使用它,然后增加值。另一方面,
++a
首先递增
a
的值,然后使用递增的值(在您的特定示例中相当于
a+1

这是因为
计数器+
++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
方法之所以有效,是因为您正确地为函数调用提供了递增的值。前缀增量也可以工作,但由于
计数器
不在其他任何地方使用,这会使事情变得过于复杂。后缀版本永远不会工作。

++before变量是预增量运算符,而++after变量是后增量运算符

计数器的值在执行printEachName()后更新

鉴于

printEachName(companyNames, newPeople, ++counter, callback);
计数器的值会立即更新,即在实际执行printEachName()之前

但是当你使用

printEachName(companyNames, newPeople, counter + 1, callback);

然后计数器的值根本不会更新。但是计数器+1会作为参数传递给函数。

只是为了补充其他人的解释

counter++
相当于这个

temp = counter, counter = counter + 1, temp
你可以在这里试试看

var counter1=123;
var foo1=counter1++;
日志(“counter1:,counter1,“foo1:,foo1”);
var=2=123;
变量foo2=(温度=计数器2,计数器2=计数器2+1,温度);

日志(“counter2:,counter2,“foo2:,foo2”)
@Luis,
counter++
counter=counter+1
不同
counter++
更像是
temp=counter,counter=counter+1,temp
。在JavaScript控制台中尝试此操作,您将看到
counter=123;foo=(温度=计数器,计数器=计数器+1,温度)
foo
将是123
计数器`将是124
temp = counter, counter = counter + 1, temp