javascript 递归堆栈溢出
javascript recursive stack overflow
有没有人能解释一下为什么下面的结果不同?
// 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 调用堆栈比第一个更快地溢出。调用堆栈值取决于执行顺序,因为在 2nd 中你更改顺序你会得到一个较低的值,因为递归稍后发生。
也可以通过添加一些console.log()来查看,否则局部变量调用栈会随着执行语句的增加而逐渐减少
如果您在两者中都尝试 computeMaxCallStackSize() + 1;
,您将获得相同的值。
有没有人能解释一下为什么下面的结果不同?
// 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 调用堆栈比第一个更快地溢出。调用堆栈值取决于执行顺序,因为在 2nd 中你更改顺序你会得到一个较低的值,因为递归稍后发生。
也可以通过添加一些console.log()来查看,否则局部变量调用栈会随着执行语句的增加而逐渐减少
如果您在两者中都尝试 computeMaxCallStackSize() + 1;
,您将获得相同的值。