一個函數可以在PhantomJS JavaScript引擎的調用堆棧限制之前遞歸調用自己多少次?換句話說,什麼是最後可能n
這裏印刷的PhantomJS:在PhantomJS中,函數調用堆棧限制是什麼?
var n = 0;
function f() {
console.log(++n);
f();
}
f();
一個函數可以在PhantomJS JavaScript引擎的調用堆棧限制之前遞歸調用自己多少次?換句話說,什麼是最後可能n
這裏印刷的PhantomJS:在PhantomJS中,函數調用堆棧限制是什麼?
var n = 0;
function f() {
console.log(++n);
f();
}
f();
我用你的代碼,並在我的電腦和我的樹莓派1運行Raspbian不同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
*上編譯03月13日2015年發展版本樹莓派2
下面是一個更現實的代碼示例,因爲你很少在PhantomJS腳本或在使用同步和遞歸碼頁。
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的內存範圍內跳躍。
413525爲PhantomJS 2.0.0和它繼續... –
它現在是768440在8.8 MB。我現在要停下來。 –
這很有趣。我想這只是意味着超時關閉的執行上下文不依賴於調用代碼。 IE,沒有調用堆棧。 –
下面是我得到的:'43540 - RangeError:超過最大調用堆棧大小'。在發佈正式答案之前,我會等待其他評論。 –