在减少PhantomJS javascript引擎的调用堆栈限制之前,一个函数可以递归调用几次?换句话说,这里为PhantomJS打印的最后一个n
是什么:
var n = 0;
function f() {
console.log(++n);
f();
}
f();
最佳答案
我使用了您的代码,并在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
* Development version compiled on March 13 2015 on a Raspberry Pi 2
The following is a more realistic code example, because you're rarely using synchronous and recursive code in a PhantomJS script or on the page.
var n = 0;
function f() {
console.log(++n);
//f();
setTimeout(f, 0);
}
f();
此异步版本(很可能会使用)没有明显的调用堆栈限制。在大约300,000次迭代(52分钟)后,我停止了该过程(在Win 8.1上为v1.9.8和v2.0.0)。版本1.9.8始终位于27.2 MB的内存中,而v2.0.0在8至10 MB的内存范围内跳跃。
关于javascript - 在PhantomJS中,函数调用堆栈限制是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33016492/