<strike id="g3zqm"></strike>

      <cite id="g3zqm"></cite>

        <tr id="g3zqm"><center id="g3zqm"></center></tr>
        <pre id="g3zqm"><sup id="g3zqm"></sup></pre>
        <li id="g3zqm"></li>
      1. 少妇高潮激情一区二区三,免费av深夜在线观看,亚洲狼人久久伊人久久伊,久久精品人人做人人爽电影蜜月,黄色特级片一区二区三区,欧美日韩在线亚洲二区综二,极品少妇无套内射视频,日本极品少妇videossexhd

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

        2021-7-26    前端達人

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

        1)作用域的銷毀
        一般情況下,函數執行形成一個私有的作用域,當執行完成后就銷毀了->節省內存空間

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

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

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


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

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

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

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

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


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

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

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

        標簽: javascript




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

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



        文章來源:博客園

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

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


        日歷

        鏈接

        個人資料

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

        存檔

        主站蜘蛛池模板: 免费jizz| 啊啊国产高清| 99re久久资源最新地址| 中文字幕韩国三级理论无码| 国产香蕉国产精品偷在线观看| 国产女人被狂躁到高潮小说| 欧美一区二区三区激情| 国产熟女91熟女| 女人与牲口性恔配视频免费| 国产AV一区二区三区天堂综合网| 欧洲精品久久久AV无码电影| 免费观看全黄做爰大片国产| 成人一区二区三区激情视频| jizz视频在线观看| 亚洲AV旡码高清在线观看| 色偷偷偷综合中文字幕| 91亚洲国产系列精品第56页| 午夜福利无遮挡十八禁视频| 草草线在成年免费视频2| 国产精品对白刺激久久久| 男女羞羞| 欧美一区二区三区成人久久片| 欧美日韩中文字幕在线视频| 国产1234区| AV黄色| 国产最大的福利精品自拍| gogogo高清在线观看视频中文| 中文字幕日产人妻久久| 色狠狠色男人| 国产18禁美女无遮挡| a天堂一码二码专区| 草草浮力影院| 国产91麻豆视频免费看| 亚洲男人第一无码av网站| 国产性色的免费视频网站| 欲色aV一区二区三区人妻无码| 97SE色综合一区二区二区| 色五月激情五月亚洲综合考虑| 噜噜久久噜噜久久鬼88| 久久se精品一区二区三区| 国产V片免费A片视频|