国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入淺出理解JavaScript閉包的功能與用法

2024-05-06 15:32:15
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript閉包的功能與用法。分享給大家供大家參考,具體如下:

理解閉包關鍵是理解JS的對象的本質以及垃圾收集機制。函數也是對象,也有屬性,通常執行一個函數時,局部變量在函數執行完后,內存會被回收,這是JS的垃圾收集機制決定的,如果想保存局部變量所占用的內存,就必須把保存在另一個不被回收的變量中,通常是全局變量。函數在創建時,內部屬性[[Scope]]保存了作用域鏈,作用域鏈中包含外部函數以及全局對象的變量,被稱為變量對象。所以把內部函數返回時,由于把函數保存了,所以內部屬性[[Scope]]所保存的變量對象也就保存了而沒有被回收,因此局部變量也就被保存了。

最簡單的閉包:

function f1() { var i = 0; return function () { var j = 0; i++; console.log(i,j); };}var fn = f1();fn();//1 0fn();//2 0

還有諸如給元素添加事件,事件函數保存著外部函數的變量,通過這個特性可以讓按鈕顯示被點擊次數。

當然可以創建多層閉包,最內部函數保存所有外部函數以及全局對象的變量,但并不是任何地方都用閉包,因為其始終都帶有[[Scope]]屬性,所有比較占內存,所以在需要的時候才用。

閉包在模塊化編程,為函數或對象創建私有變量的時候非常有用,可以避免全局污染以及變量命名沖突的問題。

值得注意的是因為[[Scope]]與函數有關,如上述例子,在兩次執行f1函數把返回的函數保存在不同的變量中,其外部函數的變量是互不影響的。如:

function f1() { var i = 0; return function () { var j = 0; i++; console.log(i,j); };}var fn = f1();fn();//1 0fn();//2 0var fn1 = f1();fn1();//1 0fn(); //3 0fn1();//2 0

感興趣的朋友可以使用在線HTML/CSS/JavaScript前端代碼調試運行工具:http://tools.Vevb.com/code/WebCodeRun測試一下上述代碼的運行效果,以加深對javascript閉包的認識。

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript常用函數技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 溧阳市| 庐江县| 阳西县| 资中县| 西充县| 彭水| 郎溪县| 清丰县| 阳朔县| 井陉县| 光山县| 寿光市| 平和县| 兴安县| 河南省| 静安区| 疏勒县| 双牌县| 沙田区| 即墨市| 丰都县| 伊宁县| 故城县| 西昌市| 景泰县| 百色市| 长治县| 阳高县| 宁晋县| 连南| 淮安市| 南皮县| 西乡县| 新余市| 科技| 舞钢市| 象州县| 马尔康县| 乌拉特中旗| 彭泽县| 连州市|