在减少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/

10-12 05:23