在PhantomJS中,函数调用堆栈限制是多少?

时间:2015-10-08 12:55:37

标签: javascript phantomjs callstack

在使用PhantomJS javascript引擎的调用堆栈限制之前,函数可以递归调用多少次?换句话说,这里为PhantomJS打印的最后一个n是什么:

var n = 0;
function f() {
  console.log(++n);
  f();
}
f();

1 个答案:

答案 0 :(得分:3)

我已经使用了您的代码,并在我的PC和运行Raspbian的Raspberry Pi 1上以不同的PhantomJS版本运行它。

Platform | Version | Maximum callstack
--------------------------------------
Win 8.1  | 2.0.0   | 65277
Win 8.1  | 1.9.8   | 65534
Win 8.1  | 1.9.7   | 65534
Win 8.1  | 1.9.0   | 65534
Win 8.1  | 1.8.2   | 65534
RPi 1    | 2.0.1*  | 43547
RPi 1    | 1.9.7   | 65534
RPi 1    | 1.9.0   | 65534

* 2015年3月13日在Raspberry Pi 2上编译的开发版

以下是一个更现实的代码示例,因为您很少在PhantomJS脚本或页面上使用同步和递归代码。

var n = 0;
function f() {
  console.log(++n);
  //f();
  setTimeout(f, 0);
}
f();

此异步版本更有可能被使用,没有明显的callstack限制。在大约300,000次迭代(52分钟)后,我停止了该过程(在Win 8.1上的v1.9.8和v2.0.0)。版本1.9.8始终位于27.2 MB的内存中,v2.0.0在8到10 MB的内存范围内跳跃。