js支援的最大遞迴次數簡單介紹

antzone發表於2017-03-26

可能很多朋友對js能夠支援最大的遞迴次數比較感興趣,下面就簡單做一下介紹,希望能夠給需要的朋友帶來幫助,最好自己在本地進行一下相關的測試,這才能夠給自己深刻的印象。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
function computeMaxCallStackSize(){  
  try{
    return 1 + computeMaxCallStackSize();
  } 
  catch (e){
    // Call stack overflow
    return 1;
  }
}

測試結果如下:

[JavaScript] 純文字檢視 複製程式碼
Node.js: 11034
Firefox: 50994
Chrome: 10402

在V8中,遞迴呼叫的數量取決於兩個量:堆疊的大小和堆疊幀(儲存引數的區域性變數)的大小。可以通過在computeMaxCallStackSize() 新增區域性變數進行驗證,它會返回低位值。

ECMAScript6中的尾部呼叫(Tail call)優化:

ES6有尾部呼叫優化:如果一個函式中的最後一步也是一個函式呼叫,它會被“跳”過,而不是通過子函式呼叫。這就意味著在ES6(嚴格模式)下,你只要稍微改一下computeMaxCallStackSize函式,它就可以永遠執行下去。

[JavaScript] 純文字檢視 複製程式碼
function computeMaxCallStackSize(size) {
  size = size || 1;
  return computeMaxCallStackSize(size + 1);
}

相關文章