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