閉包是js中比較難以理解的概念朱巨,今天在敲立即執(zhí)行函數(shù)的時(shí)候突然有感,稍作分析,聊表心意
閉包的概念簡(jiǎn)記
阮一峰的一篇文章講到了一種很淺顯易懂的理解:
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)
例如:
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
n; //undefined
var result = f1();
result();//999
當(dāng)然這種說法必要但是不充分俏竞,因?yàn)檫@種說法沒有包括這樣一種情況(作用域內(nèi))
var obj = {
a: 'a',
showA: function() {
console.log(this.a);
}
}
obj.showA(); //'a'
所以更為確切的理解我覺得是:
閉包就是能夠讀取其他作用域內(nèi)部變量的函數(shù)
立即執(zhí)行函數(shù)內(nèi)部形成的閉包
(function(global) {
var defaultOpts = {
a: 'abc'
};
function Test() {
this.options = defaultOpts;
};
Test.prototype = {
showA: function() {
console.log(this.options.a);
}
};
global.Test = Test;
})(this);
defaultOpts; //undefined
new Test().showA();//abc
defaultOpts作為立即執(zhí)行函數(shù)中的局部變量绸硕,在外部直接訪問是訪問不到的,然而它并沒有在立即執(zhí)行函數(shù)執(zhí)行完成之后就消失魂毁,因?yàn)樗谌趾瘮?shù)Test中被使用到了玻佩,它其實(shí)已經(jīng)常駐內(nèi)存了
so,遇到這樣的情況不要疑惑席楚,因?yàn)檫@已經(jīng)形成閉包了
After
coding過程中突然的自我~~
繼續(xù)搬磚去了