Javascript 递归计数并使用+;1对++;

Javascript 递归计数并使用+;1对++;,javascript,recursion,Javascript,Recursion,我有一个关于递归的基本问题,+1和++的差异如何影响结果 为什么该代码: var arrayLoop = function(idx){ if(idx < 5){ console.log(idx); return arrayLoop(idx+1); } }; arrayLoop(0); var arrayLoop=函数(idx){ if(idx

我有一个关于递归的基本问题,+1和++的差异如何影响结果

为什么该代码:

var arrayLoop = function(idx){
  if(idx < 5){
    console.log(idx);
     return arrayLoop(idx+1);
   }
};
arrayLoop(0);
var arrayLoop=函数(idx){
if(idx<5){
console.log(idx);
返回arrayLoop(idx+1);
}
};
arrayLoop(0);
可以很好地工作,但是:

var arrayLoop = function(idx){
  if(idx < 5){
    console.log(idx);
    return arrayLoop(idx++);
  }
};
arrayLoop(0);
var arrayLoop=函数(idx){
if(idx<5){
console.log(idx);
返回arrayLoop(idx++);
}
};
arrayLoop(0);

导致无限循环?

i++是一个递增“i”的表达式,但返回递增之前的值。您可以使用++i来实现所需的结果。

i++是一个递增“i”的表达式,但返回递增之前的值。您可以使用+++i来实现所需的结果。

在第二个示例中,您使用了
++
操作符作为后期增量,因此您使用的是
idx++
而不是
++idx

发生的情况是,对于增量后的表达式,使用增量前的值求值,然后它就是增量。你可以看到它有点像(注意,语义上并不完全相同,它只是给你一个想法)

return arrayLoop(idx);
idx = idx + 1;
因此,您可以看到该方法总是以
0
作为参数调用

预增量
++idx
运算符将反转操作:

idx = idx + 1;
return arrayLoop(idx);

在第二个示例中,您使用了
++
运算符作为后期增量,因此您使用的是
idx++
,而不是
++idx

发生的情况是,对于增量后的表达式,使用增量前的值求值,然后它就是增量。你可以看到它有点像(注意,语义上并不完全相同,它只是给你一个想法)

return arrayLoop(idx);
idx = idx + 1;
因此,您可以看到该方法总是以
0
作为参数调用

预增量
++idx
运算符将反转操作:

idx = idx + 1;
return arrayLoop(idx);

这就是为什么嵌套++(之前或之后)不是一个好主意的原因。当您仍在使用它时,它会更改idx。对于函数式编程(通常使用递归),
idx+1
更好,它不会改变idx,并且在序列中表达下一个的想法更好。这就是为什么嵌套++(之前或之后)不是一个好主意的原因。当您仍在使用它时,它会更改idx。对于函数式编程(通常使用递归),
idx+1
更好,它不会改变idx,并且在序列中更好地表达下一个的想法。