有没有人可以解释为什么下面的结果不同?
// test one
function computeMaxCallStackSize() {
try {
return computeMaxCallStackSize() + 1;
} catch (e) {
return 1;
}
}
console.log(computeMaxCallStackSize());
结果是17958
// test two
function computeMaxCallStackSize() {
try {
return 1 + computeMaxCallStackSize();
} catch (e) {
return 1;
}
}
console.log(computeMaxCallStackSize());
结果是15714
computeMaxCallStackSize函数的位置不同,结果也不同。什么原因?非常感谢!
运行环境:
node.js v6.9.1
操作系统:Win7
最佳答案
在第一个函数语句中导致这个的不是位置而是执行顺序
return computeMaxCallStackSize() + 1;
先调用增量再加1
return 1 + computeMaxCallStackSize();
如果您尝试将两个 return 语句相同,那么它会导致相同的值。在后面的一个中,因为数字是第一个,所以 js 调用堆栈比第一个更快地溢出。调用堆栈值取决于执行顺序,因为在 2nd 中你更改顺序你会得到一个较低的值,因为递归稍后发生。
也可以通过添加一些console.log()或者局部变量调用堆栈来查看,随着执行语句的增多,调用栈会逐渐减少。
如果您在两者中尝试 computeMaxCallStackSize() + 1;
,您将获得相同的值。
关于javascript递归堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43340776/