在使用PhantomJS javascript引擎的调用堆栈限制之前,函数可以递归调用多少次?换句话说,这里为PhantomJS打印的最后一个n
是什么:
var n = 0;
function f() {
console.log(++n);
f();
}
f();
答案 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的内存范围内跳跃。