• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品18久久久久久,黄色在线免费观看

    關于JS中作用域的銷毀和不銷毀的情況總結

    2021-7-26    前端達人

    window全局作用域->頁面關掉才銷毀
    函數(shù)執(zhí)行會形成私有的作用域

    1)作用域的銷毀
    一般情況下,函數(shù)執(zhí)行形成一個私有的作用域,當執(zhí)行完成后就銷毀了->節(jié)省內(nèi)存空間

    2)作用域的不立即銷毀
    function fn(){
    var i=10;
    return function(n){
    console.log(n+i++);
    }
    }
    fn()(15);//->先執(zhí)行fn,有一個私有的變量i=10,返回一個堆內(nèi)存地址 xxxfff111,我們發(fā)現(xiàn)這個地址還用到了一次,那么當前的這個fn形成私有作用域(A)就不能立即銷毀了,xxxfff111(15)->輸出25,A中的i變?yōu)?1;當xxxfff111執(zhí)行完了,發(fā)現(xiàn)這個地址沒用了,瀏覽器就把A、xxxfff111都釋放了

    fn()(20);//->在執(zhí)行fn的時候一切都從新開始了,和上面的步驟是一樣的->輸出30

    3)作用域的不銷毀:形成一個私有作用域,里面的內(nèi)容被外面占用了
    function fn(){
    var i=10;
    return function(n){
    console.log(n+i++);
    }
    }
    var f=fn();//->fn執(zhí)行形成一個私有的作用域A,A中有一個私有的變量i=10,A中返回一個地址xxxfff11,被外面的f占用了,那么當前的A就不能銷毀了
    f(15);//->輸出25,讓A中的i=11
    f(20);//->輸出31,讓A中的i=12
    ...
    當我們知道f用完的時候,為了優(yōu)化性能,我們讓f=null,這樣的話A中的xxxfff111沒人占用了,瀏覽器會把A和xxxfff111都釋放了


    幾種不銷毀常用到的形式:
    1)函數(shù)執(zhí)行,返回一個引用數(shù)據(jù)類型的值,并且在函數(shù)的外面被別人接收了,那么當前函數(shù)形成的私有作用域就不在銷毀了-->例如上面的案例

    2)在函數(shù)執(zhí)行的時候,里面的一個小函數(shù)的地址賦值給了我們的外面元素的點擊事件,那么當前小函數(shù)也相當于被外面占用了,大函數(shù)執(zhí)行形成的私有的作用域也不銷毀了
    //每一次循環(huán)都執(zhí)行自執(zhí)行函數(shù)形成一個私有的作用域(循環(huán)三次就有三個作用域,每一個作用域中都有一個i,第一個存儲的是0,第二個存數(shù)的是1..),在每一個私有的作用域中都把里面的函數(shù)綁定給了外面元素的點擊事件,這樣的話每一次形成的作用域都不銷毀了(三個不銷毀的作用域)
    var oLis=document.getElementsByTagName("li");
    for(var i=0;i<oLis.length;i++){
    ~function(i){
    oLis[i].onclick=function(){
    tabChange(i);
    }
    }(i);
    }

    3)在使用setTimeout實現(xiàn)輪詢動畫的時候,我們?nèi)绻鹠ove需要傳遞參數(shù)值,那么像下面這樣的寫法會行成很多的不銷毀的作用域,非常的耗性能
    function move(tar){
    <js code>

    //window.setTimeout(move,10); ->第二次執(zhí)行move的時候我們沒有給它傳值(這樣寫不行)
    window.setTimeout(function(){
    move(tar);
    },10);//->這樣寫實現(xiàn)了,但是每一次執(zhí)行定時器都會形成一個私有的所用域(匿名函數(shù)形成的)A,在A中使用了上級作用域中的tar的值,而且執(zhí)行了move又形成了一個小的作用域(而在小的作用域中會使用tar的值),這樣每一次定時器形成的A都不能銷毀了
    }
    move(100);//->第一次這樣執(zhí)行傳遞100

    //解決辦法:
    function move(tar){
    ~function _move(){
    <js code>
    window.setTimeout(_move,10);
    }();
    }
    move(100);//->第一次這樣執(zhí)行傳遞100


    JS中內(nèi)存空間釋放的問題(堆內(nèi)存、棧內(nèi)存)
    [谷歌瀏覽器]
    我們開辟一個內(nèi)存,可能或有一些其他的變量等占用了這個內(nèi)存,谷歌瀏覽器都會間隔一段時間看這個內(nèi)存還有沒有被占用,如果發(fā)現(xiàn)有沒有被占用的內(nèi)存了,就自己幫我們回收了(內(nèi)存釋放)

    [火狐和IE]
    我們開個內(nèi)存,當我們引用了它,就在內(nèi)存中記錄一個數(shù),增加一個引用瀏覽器就把這個數(shù)+1,減少一個引用,瀏覽器就把這個數(shù)-1...當減到零的時候瀏覽器就把這個內(nèi)存釋放了;但是有些情況下(尤其是IE)記著記著就弄亂了,內(nèi)存就不能釋放了-->瀏覽器的內(nèi)存泄露

    var obj={};
    我們養(yǎng)成一個好的習慣,當我們obj這個對象使用完成了,我們手動的obj=null (null空對象指針),瀏覽器會自己把剛才的堆內(nèi)存釋放掉

    標簽: javascript




    藍藍設計建立了UI設計分享群,每天會分享國內(nèi)外的一些優(yōu)秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯(lián)系。

    截屏2021-05-13 上午11.41.03.png



    文章來源:博客園

    分享此文一切功德,皆悉回向給文章原作者及眾讀者.
    免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

    藍藍設計m.lzhte.cn )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網(wǎng)站建設 、平面設計服務


    日歷

    鏈接

    個人資料

    藍藍設計的小編 http://m.lzhte.cn

    存檔

    主站蜘蛛池模板: 无码专区人妻系列日韩精品少妇| 亚洲AV无码一区二区三区精神| 亚洲综合色区在线播放2019| 91热久久免费频精品99欧美| 日日摸夜夜添夜夜添破| 国产精品亚洲一区二区极品| 色偷偷www.8888在线观看| 精品久久久久久无码人妻热| 亚洲精品一区二区美女| 国产成人高清精品免费软件| 99精品欧美一区二区三区美图| a欧美一级爱看视频| 尤物视频在线免费观看| 亚洲区日韩精品中文字幕| 91亚洲欧洲日产国码精品| 免费 国产 无码久久久| 一级毛片在线免费看| 国产精品va免费视频| 男人的天堂av一二三区| 人妻色图| 女女同性一区二区三区四区| 国产精品成人观看视频国产| 激情亚洲的在线观看| 狠狠亚洲丁香综合久久| 国产亚洲AV无码一区二区二三区 | 国产亚洲精品xxx| 婷婷丁香五月亚洲| 婷婷狠狠综合五月天| 亚洲不卡av中文在线| AV无码免费永久在线观看| 97青青青国产在线播放| 国产精品麻豆A啊在线观看| 亚洲AV片不卡无码久久欣赏网| 国产成人精品免费视频大全软件| 日本亚洲欧美在线视观看| 久久中国国产Av秘 入口| 99久久99精品久久久久久| 粉嫩导航| 亚洲色大成网站www永久在线观看| 亚洲欧美va在线播放| 国产日本精品视频在线观看|