亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2018年08月01日 11:25:35   作者:winjowind  
這篇文章主要介紹了深入淺出理解JavaScript閉包的功能與用法,結合實例形式從變量、函數的內部屬性與作用域鏈分析了javascript閉包的相關概念、功能與使用技巧,需要的朋友可以參考下

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

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

最簡單的閉包:

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

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

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

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

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

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

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

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

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

相關文章

最新評論