日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS闭包的简单理解。优缺点以及垃圾回收机制

發布時間:2025/3/12 javascript 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS闭包的简单理解。优缺点以及垃圾回收机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閉包是什么?

·了解閉包首先了解js的‘鏈式作用域’結構,對象可以一級一級的向上查找父對象的變量,所以父對象的變量對子對象可見,反之不成立;所以都可以訪問全局變量

·為了解決函數外部無法訪問函數內局部變量的問題,就在父函數中定義一個子函數并讓它訪問了父函數的局部變量,再通過父函數返回該子函數就實現了調用局部變量的效果;

·而上面中的子函數就是閉包,所以閉包的定義是“能夠讀取其他函數內部變量的函數”,其實簡單理解就是“一個定義在函數中的函數”;

示例

????? function parent(){ var a=1,b=2;???????? function child(){??????????? console.log(a+b);???????? }???????? return child;????? }????? var func1=parent(); //這是將子函數返回給變量????? func1();

使用閉包有什么好處?

在內存中維持一個變量,由于閉包,f1中的n只有通過f2方法訪問到,無法通過其他途徑訪問修改,從而達到了保護變量安全的效果;通過閉包實現了js私有屬性和私有方法的效果;

????function f1(){

????//閉包f2被外引用始終存在內存中,而它所依賴的f1也會始終存在

????//所以n,m都是始終存在,刪除閉包直接f1=null;

????n=1,m=100;

????madd=function(){

????m+=10;

????alert(m);

????} ?//全局變量madd

????function f2(){

????n+=1;

????alert(n);

????}

????return f2;

????}

????var a=f1(); //將子函數返回賦值給了變量a

????a();

????madd();

????//madd的值是一個匿名函數,同時是一個閉包,實現了外部對函數內部進行操作

????a();


使用閉包的注意點:

·閉包會使函數中的變量一直存在內存上會導致內存消耗過大,所以不能濫用閉包,否則會造成網頁性能問題,IE可能會造成內存溢出。最好的方式是在退出閉包前將不必要的局部變量刪除。

·JavaScript垃圾回收機制,如果一個對象不再被引用,那么這個對象就會被GC回收,如果兩個對象相互引用,而不再被第三方引用,那么這兩個對象會被GC回收,上述父函數被子函數引用,子函數又被外部c引用,這就是父函數不被回收的原因;

·作用域鏈時為了保證在執行環境中有權訪問的變量和方法是有序的,只能向上訪問,到window終止,即作用域鏈向下訪問是不被允許的;




總結

以上是生活随笔為你收集整理的JS闭包的简单理解。优缺点以及垃圾回收机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。