亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS的函數(shù)調(diào)用棧stack size的計(jì)算方法

 更新時(shí)間:2018年06月24日 11:23:14   投稿:laozhang  
本篇文章給大家分享了關(guān)于JS的函數(shù)調(diào)用棧stack size的計(jì)算方法的相關(guān)知識(shí)點(diǎn),有興趣的朋友參考學(xué)習(xí)下。

如果你寫(xiě)了一個(gè)一直調(diào)用自身的死循環(huán),那么恭喜你,很快就可以看到報(bào)錯(cuò):Uncaught RangeError: Maximum call stack size exceeded。那么這個(gè)call stack size有多少呢?

1. 計(jì)算方法

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

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

運(yùn)行得到如下三個(gè)結(jié)果:

  • Node.js: 11034
  • Firefox: 50994
  • Chrome: 10402

這些數(shù)字代表了什么呢?Mr.Aleph告訴我在V8,可調(diào)用的層數(shù)基于兩個(gè)方面:1. 棧的大??;2. 每一棧幀的大小(用于記錄函數(shù)參數(shù)和局部變量)。你可以在computeMaxCallStackSize聲明局部變量來(lái)測(cè)試,你會(huì)發(fā)現(xiàn)數(shù)字變小。

2. ECMAScript 6中尾遞歸優(yōu)化

ECMAScript 6支持尾遞歸優(yōu)化:如果一個(gè)函數(shù)的最后一個(gè)操作是函數(shù)調(diào)用,那么將會(huì)用“跳轉(zhuǎn)”而不是“子調(diào)用”。也就是說(shuō)如果你將computeMaxCallStackSize重寫(xiě)成如下形式,在ES6的嚴(yán)格模式下,就會(huì)一直運(yùn)行了。

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

3. 亮點(diǎn)評(píng)論

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

回復(fù)Andrei: 有趣!你不能用這段代碼去計(jì)算stack size。在ES6下,這段代碼會(huì)一直運(yùn)行,因此不會(huì)返回?cái)?shù)據(jù)。在其它情況下,會(huì)返回RangeError。為了使其工作,我把代碼重寫(xiě)了一下:

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

相關(guān)文章

  • JavaScript中arguments的使用方法

    JavaScript中arguments的使用方法

    這篇文章主要介紹了JavaScript中arguments的使用方法,arguments?是一個(gè)對(duì)應(yīng)于傳遞給函數(shù)的參數(shù)的類(lèi)數(shù)組對(duì)象。下文詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • JavaScript中的return語(yǔ)句簡(jiǎn)單介紹

    JavaScript中的return語(yǔ)句簡(jiǎn)單介紹

    return語(yǔ)句在js中起到舉足輕重的作用,該關(guān)鍵字不僅具有返回函數(shù)值得功能,還具有一些特殊的用法,有個(gè)清晰的把握是非常有必要的,下面通過(guò)本篇文章給大家簡(jiǎn)單介紹下return語(yǔ)句的作用
    2015-12-12
  • 兩種JavaScript的AES加密方式(可與Java相互加解密)

    兩種JavaScript的AES加密方式(可與Java相互加解密)

    這篇文章主要介紹了兩種JavaScript的AES加密方式(可與Java相互加解密) 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 小程序中英文混合排序問(wèn)題解決

    小程序中英文混合排序問(wèn)題解決

    這篇文章主要介紹了小程序中英文混合排序問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 微信小程序緩存過(guò)期時(shí)間的使用詳情

    微信小程序緩存過(guò)期時(shí)間的使用詳情

    這篇文章主要介紹了微信小程序緩存過(guò)期時(shí)間的使用詳情,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • 簡(jiǎn)單談?wù)刧ulp-changed插件

    簡(jiǎn)單談?wù)刧ulp-changed插件

    這篇文章主要介紹了關(guān)于gulp-changed插件的相關(guān)資料,文中介紹的還是相對(duì)詳細(xì)的,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • jquery操作下拉列表、文本框、復(fù)選框、單選框集合(收藏)

    jquery操作下拉列表、文本框、復(fù)選框、單選框集合(收藏)

    jquery操作拉列表、文本框、復(fù)選框、單選框集合。各種對(duì)下拉列表、文本框、復(fù)選框、單選框的jquery的相關(guān)操作。做為記錄和收藏的最好方法
    2014-01-01
  • js中addEventListener()與removeEventListener()用法案例分析

    js中addEventListener()與removeEventListener()用法案例分析

    這篇文章主要介紹了js中addEventListener()與removeEventListener()用法,結(jié)合實(shí)例形式分析了js中addEventListener()與removeEventListener()基本功能、用法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • JS實(shí)現(xiàn)1000以內(nèi)被3或5整除的數(shù)字之和

    JS實(shí)現(xiàn)1000以內(nèi)被3或5整除的數(shù)字之和

    今天在技術(shù)群里看到一道這樣的提:求1000以內(nèi)被3或5整除的數(shù)字之和。小編把我的解決辦法分享到腳本之家平臺(tái),供大家參考
    2016-02-02
  • js選項(xiàng)卡的實(shí)現(xiàn)方法

    js選項(xiàng)卡的實(shí)現(xiàn)方法

    這篇文章主要介紹了js選項(xiàng)卡的實(shí)現(xiàn)方法,實(shí)例分析了js選項(xiàng)卡的實(shí)現(xiàn)思路及html+css布局與js功能技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論