有谁会解释为什么下面的结果不同?
// 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
OS:Win7
最佳答案
在第一个函数中导致位置变化的不是位置而是执行顺序
return computeMaxCallStackSize() + 1;
首先调用增量,然后加1
return 1 + computeMaxCallStackSize();
如果您尝试两个相同的return语句,那么它将导致相同的值。在后面第一个数字中,与第一个相比,js调用堆栈更快地超过了溢出。调用堆栈的值取决于执行的顺序,因为在第二个中,您更改了获得较低值的顺序,因为以后会递归发生。
您还可以通过添加一些console.log()进行检查,否则局部变量调用堆栈将随着执行语句的增加而逐渐减少。
如果您同时尝试
computeMaxCallStackSize() + 1;
,则将获得相同的值。