MDN 對閉包的定義是:閉包是指那些能夠訪問自由變量的函數(shù)母蛛,自由變量是指在函數(shù)中使用的翩剪,但既不是函數(shù)參數(shù)又不是函數(shù)的局部變量的變量,由此可以看出彩郊,閉包=函數(shù)+函數(shù)能夠訪問的自由變量前弯,所以從技術(shù)的角度講蚪缀,所有 JS 函數(shù)都是閉包,但是這是理論上的閉包恕出,還有一個實踐角度上的閉包询枚,從實踐角度上來說,只有滿足
1浙巫、即使創(chuàng)建它的上下文已經(jīng)銷毀金蜀,它仍然存在
2、在代碼中引入了自由變量的畴,才稱為閉包
閉包的應用:
模仿塊級作用域渊抄。2、保存外部函數(shù)的變量丧裁。3护桦、封裝私有變量單例模式:
var Singleton = (function(){
var instance;
var CreateSingleton = function (name) {
this.name = name;
if(instance) {
return instance;
}
// 打印實例名字
this.getName();
// instance = this;
// return instance;
return instance = this;
}
// 獲取實例的名字
CreateSingleton.prototype.getName = function() {
console.log(this.name)
}
return CreateSingleton;
})();
// 創(chuàng)建實例對象 1
var a = new Singleton('a');
// 創(chuàng)建實例對象 2
var b = new Singleton('b');
console.log(a===b);