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;,您将获得相同的值。