欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

JS系列之垃圾回收機制,內存泄漏,閉包是什么意思-創新互聯

JS系列之垃圾回收機制,內存泄漏,閉包是什么意思?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

成都創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站設計、成都網站制作、外貿網站建設、萬柏林網絡推廣、小程序制作、萬柏林網絡營銷、萬柏林企業策劃、萬柏林品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;成都創新互聯為所有大學生創業者提供萬柏林建站搭建服務,24小時服務熱線:18982081108,官方網址:m.kartarina.com

垃圾回收機制

前面一篇博客主要講解了內存的分配和使用(棧內存與堆內存,深拷貝與淺拷貝),使用完了以后,當然是要將不使用的內存歸還,就像將手機上不使用的軟件從后臺清除,可以提升手機的運行速度,不然越來越多,遲早會卡, JS 也是一樣的。

每隔一段時間, JS垃圾收集器都會對變量進行“巡邏”,就和保安巡邏園區一樣,讓不相干的人趕緊走。當一個變量不被需要了以后,它就會把這個變量所占用的內存空間所釋放,這個過程就叫做垃圾回收

JS 的垃圾回收算法分為兩種,引用計數法和標記清除法

  • 引用計數法

    引用計數法是最初級的垃圾回收算法,已經被現代瀏覽器所淘汰了。在學習引用計數法之前,需要首先對引用有一定的概念,你可以認為它就是對當前變量所指向的那塊內存地址的描述,有點類似于JS引用數據類型的內存指向的概念,先來看一行代碼:

    var obj={name:'jack'};復制代碼

    當我們在給 obj 賦值的同時,其實就創建了一個指向該變量的引用,引用計數為1,在引用計數法的機制下,內存中的每一個值都會對應一個引用計數

    而當我們給 obj 賦值為 null時,這個變量就變成了一塊沒用的內存,那么此時, obj 的引用計數將會變成 0,它將會被垃圾收集器所回收,也就是 obj 所占用的內存空間將會被釋放

    我們知道,函數作用域的生命周期是很短暫的,在函數執行完畢之后,里面的變量基本是沒用的變量了,不清除的后果就是該內存垃圾沒有被釋放,依然霸占著原有的內存不松手,就會容易引發內存泄漏,先來看一段代碼以及運行結果:

    function changeName(){   var obj1={};   var obj2={};
       
       obj1.target=obj2;
       obj2.target=obj1;
       obj1.age=15;   console.log(obj1.target);   console.log(obj2.target);
    }
    
    changeName();復制代碼
    我們可以看到, obj1.targetobj2.target 存在互相引用的情況,因為在改變 obj1.age 的同時,obj1.target.ageobj2.target.age 也同時都被影響到了,它們所指向的引用計數是一致的

    在函數執行完畢的時候, obj1obj2 還是活的好好地,因為 obj1.targetobj2.target 的引用計數在執行完畢之后,仍然是 1 ,明明函數執行完畢,但是這種垃圾依然存在,這種函數定義多了,內存泄漏也會是無法避免的

  • 標記清除法

    上面的引用計數法的弊端已經很明顯了,那么,現在所要說的標記清除法就不存在這樣子的問題。因為它采用的判斷標準是看這個對象是否可抵達,它主要分為兩個階段,標記階段清除階段:

    • 標記階段

      垃圾收集器會從根對象(Window對象)出發,掃描所有可以觸及的對象,這就是所謂的可抵達

    • 清除階段 在掃描的同時,根對象無法觸及(不可抵達)的對象,就是被認為不被需要的對象,就會被當成垃圾清除

    現在再來看下上面的代碼

    function changeName(){    var obj1={};  var obj2={};
      
      obj1.target=obj2;
      obj2.target=obj1;
      obj1.age=15;  console.log(obj1.target);  console.log(obj2.target);
    }
    
    changeName();復制代碼

    在函數執行完畢之后,函數的聲明周期結束,那么現在,從 Window對象 出發, obj1obj2 都會被垃圾收集器標記為不可抵達,這樣子的情況下,互相引用的情況也會迎刃而解。

內存泄漏

該釋放的內存垃圾沒有被釋放,依然霸占著原有的內存不松手,造成系統內存的浪費,導致性能惡化,系統崩潰等嚴重后果,這就是所謂的內存泄漏

閉包

  • 定義與特性

    閉包是指有權訪問另一個函數作用域中的變量的函數。至于為什么有權訪問,主要是因為作用域嵌套作用域,也就是所謂的作用域鏈,關于作用域鏈不清楚的可以看我的第一篇博客一文搞懂JS系列(一)之編譯原理,作用域,作用域鏈,變量提升,暫時性死區,就是因為作用域鏈的存在,所以內部函數才可以訪問外部函數中定義的變量 ,作用域鏈是向外不向內的,探出頭去,向外查找,而不是看著鍋里,所以外部函數是無法訪問內部函數定義的變量的。并且,還有一個特性就是將閉包內的變量始終保持在內存中。

    前面的作用域向外不向內,這里就不再做過多解釋了,我們主要來看我后面說的特性,那就是閉包內的變量始終保存在內存中

    來看一下阮一峰教程當中的一個例子

     function f1(){     var n=999;
    
         nAdd=function(){n+=1}     function f2(){         console.log(n);
         }     return f2;
    
     } var result=f1();     //等同于return f2();
    
     result(); // 999
    
     nAdd();
    
     result(); // 1000
     nAdd();
    
     result(); // 1000復制代碼

    從輸出結果就可以看得出來,這個變量 n 就一直保存在內存中,那么,為什么會這樣子呢,我們現在就來逐步地分析代碼

    ① 首先 f1() 作為 f2() 的父函數,根據作用域鏈的規則, nAdd() 方法以及 f2() 方法中可以正常訪問到 n 的值

    f2() 被賦予了一個全局變量,可能這里大家就會開始產生疑惑了,這個 f2() 不是好好地定義在了 f1() 函數中嗎,這不是扯淡嗎,那么,先看下面的這句 var result=f1(); ,這個 result 很明顯是被賦予了一個全局變量,這應該是沒有任何爭議的,那么,接著來看這個 f1() ,可以看到最后,是一句 return f2; ,看到這里,想必大家也已經想明白了,這個 f2() 被賦予了一個全局變量

    ③ 已經明白了上面的這一點以后,根據上面垃圾回收機制所提及到的標記清除法,這個 f2() 始終是可以被根對象 Window 訪問到的,所以 f2 將始終存在于內存之中,而 f2 是依賴于 f1 ,因此 f1 也將始終存在于內存當中,那么, n 的值也就自然始終存在于內存當中啦

    ④ 還有一點需要注意的就是為什么我們可以直接執行 nAdd() ,這是因為在 nAdd() 的前面沒有使用 var ,因此 nAdd() 是一個全局函數而不是局部函數。

    感謝各位的閱讀!看完上述內容,你們對JS系列之垃圾回收機制,內存泄漏,閉包是什么意思大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注創新互聯-成都網站建設公司行業資訊頻道。

分享名稱:JS系列之垃圾回收機制,內存泄漏,閉包是什么意思-創新互聯
當前鏈接:http://m.kartarina.com/article26/dejejg.html

成都網站建設公司_創新互聯,為您提供建站公司、小程序開發、網站收錄、網站策劃、ChatGPT、動態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
久久综合九色综合欧美98| 欧美在线免费观看视频| 精品视频在线免费| 色天使久久综合网天天| 99久久免费视频.com| 成人综合婷婷国产精品久久蜜臀| 精品夜夜嗨av一区二区三区| 免费不卡在线观看| 精品无码三级在线观看视频| 国产一区二区三区黄视频 | 亚洲精品美国一| 国产精品三级电影| 成人欧美一区二区三区1314| 国产精品久久久久久久裸模| 亚洲欧美色综合| 亚洲美女视频在线观看| 亚洲一级二级三级| 日韩1区2区日韩1区2区| 精品久久人人做人人爽| 中文字幕欧美国产| 亚洲色图色小说| 性感美女久久精品| 精品亚洲国产成人av制服丝袜 | 91精品1区2区| 欧美剧情片在线观看| 精品盗摄一区二区三区| 自拍偷拍国产亚洲| 蜜臀va亚洲va欧美va天堂| 夫妻av一区二区| 在线观看一区二区精品视频| 欧美一卡二卡三卡四卡| 中文字幕在线观看不卡视频| 午夜精品久久久久久久久久久| 久久av资源网| 欧洲精品在线观看| 国产欧美日韩在线视频| 亚洲 欧美综合在线网络| 激情成人午夜视频| 欧美性生交片4| 国产欧美日韩一区二区三区在线观看| 亚洲一区二区精品3399| 经典三级在线一区| 欧美色倩网站大全免费| 欧美经典三级视频一区二区三区| 亚洲成人先锋电影| 99精品偷自拍| 久久久久久**毛片大全| 亚洲国产cao| gogogo免费视频观看亚洲一| 91精品婷婷国产综合久久性色| 亚洲色图都市小说| 国内精品伊人久久久久av影院 | 91黄色小视频| 久久综合视频网| 五月婷婷激情综合网| 色哟哟一区二区在线观看| 久久久99精品久久| 老汉av免费一区二区三区| 欧美日韩一区二区三区在线| 成人一区二区三区在线观看| 日韩欧美国产一二三区| 亚洲va国产天堂va久久en| www.视频一区| 国产日韩欧美综合一区| 精品久久久久久无| 亚洲国产精品一区二区www在线| 99久久精品一区二区| 国产日韩欧美精品一区| 久久国产精品72免费观看| 欧美丰满嫩嫩电影| 天堂影院一区二区| 欧美日韩高清在线播放| 亚洲一区二区三区在线播放| 91原创在线视频| **网站欧美大片在线观看| 99久久国产综合精品女不卡| 国产精品久久久久久亚洲伦| 成人激情图片网| 国产精品拍天天在线| 成人app在线观看| 国产精品成人免费精品自在线观看| 国产精品123| 国产精品情趣视频| 99国产欧美另类久久久精品| 亚洲欧美日韩综合aⅴ视频| 在线影院国内精品| 日韩精品国产欧美| 欧美成人综合网站| 国产毛片精品视频| 国产精品久久久久久久久果冻传媒 | 中文字幕一区av| 一本色道a无线码一区v| 亚洲高清不卡在线| 欧美精品v国产精品v日韩精品 | av在线一区二区三区| 洋洋av久久久久久久一区| 欧美日韩第一区日日骚| 久久av中文字幕片| 亚洲日本va午夜在线影院| 91久久免费观看| 看片网站欧美日韩| 欧美国产一区视频在线观看| 在线免费不卡电影| 精品午夜久久福利影院| 国产精品国产三级国产专播品爱网| 欧美这里有精品| 久久av资源网| 一区二区视频免费在线观看| 日韩一区二区免费在线电影| av不卡免费电影| 美女视频黄 久久| 综合电影一区二区三区 | 91猫先生在线| 日本不卡一二三| 亚洲欧美日韩国产一区二区三区| 欧美日韩国产不卡| 99综合电影在线视频| 青青草精品视频| 亚洲欧美另类久久久精品 | 亚洲欧洲中文日韩久久av乱码| 欧美一区二区三区视频在线| 99久久99久久精品国产片果冻| 日韩成人精品视频| 亚洲色大成网站www久久九九| 91麻豆精品国产91久久久久久久久| 成人涩涩免费视频| 经典一区二区三区| 日韩中文字幕av电影| 亚洲天堂2014| 国产一区二区三区日韩| 日韩精品福利网| 亚洲午夜私人影院| 亚洲欧美影音先锋| 中文无字幕一区二区三区| 日本麻豆一区二区三区视频| 亚洲精品少妇30p| 久久精品欧美一区二区三区麻豆| 欧美区视频在线观看| 在线精品视频免费观看| a美女胸又www黄视频久久| 国产精品综合一区二区| 九一久久久久久| 日韩国产欧美在线视频| 亚洲午夜精品网| 亚洲自拍另类综合| 伊人婷婷欧美激情| 亚洲三级电影网站| 亚洲欧美日韩系列| 亚洲欧美一区二区三区孕妇| 综合激情网...| 一区二区三区欧美| 一区二区三区欧美亚洲| 亚洲一区在线视频观看| 一本一道综合狠狠老| 91小视频在线观看| 色综合网色综合| 在线观看精品一区| 欧美色网站导航| 欧美日韩高清影院| 欧美成人性战久久| 精品乱人伦小说| 久久精品人人做人人爽97| 亚洲国产精品精华液ab| 欧美国产禁国产网站cc| 一区在线中文字幕| 在线免费观看成人短视频| 欧美日韩一区二区三区在线看 | 欧美国产日韩亚洲一区| 欧美极品xxx| 亚洲欧美一区二区三区极速播放| 亚洲美女在线国产| 日韩精品亚洲专区| 国产伦精品一区二区三区免费| 成人激情av网| 欧美伊人久久久久久久久影院 | 亚洲色图欧美激情| 亚洲国产成人av好男人在线观看| 奇米一区二区三区| 福利一区在线观看| 欧美亚洲综合在线| 精品国产制服丝袜高跟| 中文字幕一区二区不卡| 日韩国产欧美三级| 国产精品久久99| 日韩精品一区第一页| 国产成人鲁色资源国产91色综| 91捆绑美女网站| 欧美一区二区视频观看视频 | 欧美一区二区二区| 国产精品毛片a∨一区二区三区| 亚洲国产婷婷综合在线精品| 激情综合色综合久久综合| 日本国产一区二区| 精品国产三级a在线观看| 99re在线精品| 日韩精品一区二区三区四区| 成人欧美一区二区三区在线播放| 日产欧产美韩系列久久99| 成人91在线观看| 2023国产精品|