Javascript 递归计数并使用+;1对++;
我有一个关于递归的基本问题,+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
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,并且在序列中更好地表达下一个的想法。