閉包就是說,能夠讀取其他函式內部變數的函式。
其實這句話我不是很明白,因為我覺得閉包的作用是:
延遲函式執行
模擬私有變數
根據第二點的描述,應該是阻止其他東西訪問自身私有成員,到了這怎麼變成讀取其他函式內部變數了?反其道而行之?
不管定義了,看看最經典的這個例子
(延遲執行):
function count() );
}return arr;
}var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];
在函式內乙個陣列arr,用於儲存平方的匿名函式。在匿名函式裡,用到了前面的區域性變數i,這裡注意,這個匿名函式從始至終都沒有執行過,然而又用到了i,因此說i**獲了,不能釋放。
接下來f1 ~ f3被賦值了三個匿名函式。分別用來計算1、2、3的平方。
f1(); // 16
f2(); // 16
f3(); // 16
然後依次執行f1 ~ f3。結果居然都是16,而不是1、4、9。可以這麼理解,匿名函式要用到i,因此i**獲了,不能釋放,真正到執行的時候,才用到了i,這時候的i已經是4了。因此結果是16。
因此,可以讓他不要只是捕獲,而是捕獲順便就執行一下。
function count()
})(i));}
return arr;
}
這裡利用了直接執行(function () {}) ();
(私有變數)
1 function createcounter(initial)
7 }
8 }9 10 var counter1 = createcounter();
11 var counter2 = createcounter(10);
12 counter1.add();
13 counter1.add();
14 counter2.add();
15 counter2.add();
16 console.log(counter1.add()); // 3
17 console.log(counter2.add()); // 13
其中,變數x被隱藏了,外界無法訪問。
posted @ 2019-04-06 20:00
編輯收藏
JS閉包理解
下圖例項 body ul li 1 li li 2 li li 3 li ul body html script vara document.getelementsbytagname li for vari 0 i a.length i i 如何從外部讀取區域性變數 functionvisitinn...
JS閉包理解
js閉包理解 在很多面試題中都會問什麼是js的閉包,為什麼需要使用閉包,使用閉包的優缺點!我在面試其他人的時候也喜歡問這個問題,回答的也是千奇百怪,現在就總結一下我對閉包的理解。閉包是一種概念,這種概念比較複雜,很多地方的定義不盡相同,我的理解是 閉包是能讀取函式內部變數的函式,也就是定義在函式內部...
js閉包理解
什麼是閉包?這兩天我在網上翻閱了大量的閉包理解部落格,有優秀的也有生搬硬套的。歸根揭底,還是理解的問題。我曾經聽老師講閉包後,還是一臉疑惑,然後下課去網上查閱資料,仔細研究之後知道是裡面要套乙個函式返回父級變數。這次我就講解一下個人理解的閉包。為什麼會出現閉包?首先,我們先想下,我現在需要乙個一直用...