你對JavaScript引擎能進行多少次遞歸調用好奇嗎?
多少次遞歸調用
下面的函數可以讓你找到答案: (靈感來自Ben Alman的 gist)
三個結果:
這些數字代表什么?Aleph先生指出,在V8中,遞歸調用的數量取決于兩個量:堆棧的大小和堆棧幀(保存參數的局部變量)的大小。你可以通過在 computeMaxCallStackSize() 添加局部變量進行驗證 - 它會返回低位值。
在ECMAScript 6中的尾部調用(Tail call)優化
ES6 有尾部調用優化 :如果一個函數中的最后一步也是一個函數調用,它會被“跳”過,而不是通過子函數調用。這就意味著在ES6(嚴格模式)下,你只要稍微改一下computeMaxCallStackSize函數,它就可以永遠執行下去。
新聞熱點
疑難解答