国产探花免费观看_亚洲丰满少妇自慰呻吟_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程序設計有所幫助。

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

圖片精選

主站蜘蛛池模板: 家居| 姜堰市| 邵阳市| 武强县| 石首市| 贵州省| 繁昌县| 孟州市| 昌乐县| 唐河县| 马龙县| 康平县| 台前县| 桃园县| 嘉鱼县| 右玉县| 泽州县| 北流市| 庄浪县| 宣汉县| 浮梁县| 肇东市| 兰西县| 焉耆| 华宁县| 焦作市| 林芝县| 卢龙县| 双桥区| 石嘴山市| 兰州市| 钟山县| 阳城县| 遂昌县| 临西县| 吉木乃县| 安宁市| 浦北县| 银川市| 洪湖市| 泌阳县|