閉包是函數(shù)的特性
每個(gè)函數(shù)都可以記住并訪問所在的作用域拜隧,當(dāng)函數(shù)在當(dāng)前作用域之外調(diào)用時(shí)阵苇,就會(huì)產(chǎn)生閉包备禀。
可以簡單的認(rèn)為洲拇,一個(gè)函數(shù)的作用域鏈就是一個(gè)閉包奈揍。
var foo = (function bar(i) {
function inner() {
console.log(i);
}
return inner;
})(10);
foo();
由于inner函數(shù)記住了bar函數(shù)作用域及自己內(nèi)部的作用域。所以執(zhí)行inner(也就是foo)赋续,就會(huì)產(chǎn)生閉包男翰。
利用閉包劫持變量
for(var i = 0; i < 5; i++) {
(function(i){
setTimeout(function timer() {
console.log(i);
}, i * 500);
}(i));
}
執(zhí)行上面代碼,每次循環(huán)timer函數(shù)都會(huì)記住不同的環(huán)境(IIFE函數(shù)作用域)纽乱,也就產(chǎn)生了不同的閉包蛾绎,每個(gè)閉包中都劫持了一份i值得副本,分別為0~4迫淹。