javascriptrecursion堆栈溢出
有没有人会解释为什么结果不同下面?
// 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();
如果您尝试两个返回语句相同,那么它会导致相同的值。 在后面的一个数字是第一个js调用堆栈比第一个更早溢出。 callstack值取决于执行的顺序,因为在第二步中,当recursion发生的时候,你改变顺序得到一个较低的值。
你也可以通过增加一些console.log()来检查,或者随着执行语句的增加,局部variables调用栈会逐渐减less。
如果您尝试computeMaxCallStackSize() + 1;
在两个你会得到同样的价值。