computeMaxCallStackSize

computeMaxCallStackSize

有谁会解释为什么下面的结果不同?

// 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.1OS:Win7

最佳答案

在第一个函数中导​​致位置变化的不是位置而是执行顺序

 return computeMaxCallStackSize() + 1;

首先调用增量,然后加1
return 1 + computeMaxCallStackSize();

如果您尝试两个相同的return语句,那么它将导致相同的值。在后面第一个数字中,与第一个相比,js调用堆栈更快地超过了溢出。调用堆栈的值取决于执行的顺序,因为在第二个中,您更改了获得较低值的顺序,因为以后会递归发生。

您还可以通过添加一些console.log()进行检查,否则局部变量调用堆栈将随着执行语句的增加而逐渐减少。

如果您同时尝试computeMaxCallStackSize() + 1;,则将获得相同的值。

10-06 11:37