js閉包的使用例子


網上關於閉包的介紹太多,這就導致了泛濫,對於新手來說,網上好多講解就說了閉包是啥,還都是用下面這種例子:

     

我的天啊,我們都看了不知道多少遍了,看完有啥用?在什么場合下用啊?

於是我翻閱各種資料,自己總結了一下:

相信大家在看我這篇文章之前應該看了好多關於閉包的講解了,其實只要記住一點,閉包就是函數里面有函數,里面的函數可以訪問父函數的變量。


 

使用場景如下:

 1 . xhr.addEventListener("load",functionName, false);

      如果functionName需要參數 怎么辦呢

     可以再定義一個函數

function functionNameFnc(a){方法一
    return function()   //方法二
{
// 標示 做functionName該做的事情 已經可以用參數了     }
}
xhr.addEventListener("load",functionNameFnc(a), false);

 這段代碼里,方法二在方法一里面,方法二還使用了方法一里面的變量,閉包!

2.  

var a = [];for (var i = 0; i < 10; i++) {  a[i] = function () {    console.log(i);  }; }

a[6](); // 10

變量i在整個函數內都有效沒有得到釋放。所以每一次循環,新的i值都會覆蓋舊值,導致最后輸出的是最后一輪的i的值。

   解決這個問題的方法如下:

for (var i=0;i<10;i++) {
a[i]=(function(i){

return function() {  console.log(i); })(i);

}
a[6](); // 6

 這里使用了匿名函數,補充一下,匿名函數最大的用途是創建閉包(這是JavaScript語言的特性之一),匿名函數是立即執行的,執行完就釋放,閉包的一個缺陷就是變量一直沒有釋放,會導致內存泄漏。

這兩個例子應該可以讓你理解閉包的使用。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM