亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS中函數調用棧stack size如何計算

發布時間:2021-08-11 11:21:55 來源:億速云 閱讀:158 作者:小新 欄目:web開發

小編給大家分享一下JS中函數調用棧stack size如何計算,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1. 計算方法

如下的方法可以為你計算出你使用的JavaScript引擎可以支持多深的調用(由Ben Alman的一段代碼獲得靈感):

function computeMaxCallStackSize() {
    try {
      return 1 + computeMaxCallStackSize();
    } catch (e) {
      // Call stack overflow
      return 1;
    }
  }

運行得到如下三個結果:

  • Node.js: 11034

  • Firefox: 50994

  • Chrome: 10402

這些數字代表了什么呢?Mr.Aleph告訴我在V8,可調用的層數基于兩個方面:1. 棧的大小;2. 每一棧幀的大小(用于記錄函數參數和局部變量)。你可以在computeMaxCallStackSize聲明局部變量來測試,你會發現數字變小。

2. ECMAScript 6中尾遞歸優化

ECMAScript 6支持尾遞歸優化:如果一個函數的最后一個操作是函數調用,那么將會用“跳轉”而不是“子調用”。也就是說如果你將computeMaxCallStackSize重寫成如下形式,在ES6的嚴格模式下,就會一直運行了。

function computeMaxCallStackSize(size) {
    size = size || 1;
    return computeMaxCallStackSize(size + 1);
  }

3. 亮點評論

Andrei: “ECMAScript 6”版本的代碼根本跑不通。雖然size會被更改,但是最終并沒有值返回。

回復Andrei: 有趣!你不能用這段代碼去計算stack size。在ES6下,這段代碼會一直運行,因此不會返回數據。在其它情況下,會返回RangeError。為了使其工作,我把代碼重寫了一下:

var computeMaxCallStackSize = (function() {
 return function() {
  var size = 0;
  function cs() {
   try {
    size++;
    return cs();
   } catch(e) {
    return size + 1;
   }
  }
  return cs();
 };
}());

以上是“JS中函數調用棧stack size如何計算”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄平县| 栾川县| 辽源市| 马尔康县| 渭南市| 水城县| 新兴县| 凤阳县| 响水县| 东辽县| 渭南市| 肥西县| 图木舒克市| 九龙坡区| 通化县| 米易县| 沈阳市| 隆安县| 图片| 昌图县| 厦门市| 津市市| 白水县| 收藏| 志丹县| 贵南县| 台湾省| 同仁县| 得荣县| 宜良县| 汕头市| 肥西县| 屏边| 咸阳市| 大英县| 高青县| 宿迁市| 深州市| 平昌县| 海盐县| 谢通门县|