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; 在两个你会得到同样的价值。