有没有人会解释为什么结果会有所不同?
// test two
function computeMaxCallStackSize() {
try {
return 1 + computeMaxCallStackSize();
} catch (e) {
return 1;
}
}
console.log(computeMaxCallStackSize());
结果 17958
node.js v6.9.1
结果 15714
当函数'computeMaxCallStackSize'的位置不同时,结果也不同。什么原因?非常感谢!
运行环境:
OS:Win7
<!-- <dependency> -->
<!-- <groupId>org.apache.parquet</groupId> -->
<!-- <artifactId>parquet-hadoop</artifactId> -->
<!-- <version>1.9.0</version> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.apache.parquet</groupId> -->
<!-- <artifactId>parquet-common</artifactId> -->
<!-- <version>1.9.0</version> -->
<!-- </dependency> -->
答案 0 :(得分:2)
它不是位置,而是在第一个函数中导致这种情况的执行顺序
return computeMaxCallStackSize() + 1;
先调用增量,然后再添加1
return 1 + computeMaxCallStackSize();
如果您将两个return语句都视为相同,那么它会导致相同的值。在后面的一个数字首先是js调用堆栈比第一个更快地超过溢出。 callstack值取决于执行的顺序,因为在第二次更改顺序时,随着递归的发生,你会得到一个较低的值。
您还可以通过添加一些console.log()来检查,或者局部变量调用堆栈会随着执行语句的增加而逐渐减少。
如果您在两者中都尝试computeMaxCallStackSize() + 1;
,则会获得相同的值。