在學(xué)習(xí)閉包的時(shí)候,想看看閉包如何來實(shí)現(xiàn)一個(gè)單例模式,可是發(fā)現(xiàn)網(wǎng)上百度出來的基本上用閉包實(shí)現(xiàn)的單例模式都是錯(cuò)誤的,大概都是copy來copy去的吧。下面是自己的實(shí)現(xiàn),大家可根據(jù)自己的需求在此基礎(chǔ)上變通以滿足自己的業(yè)務(wù)需求。
定義:
(function (global){
function SimpleObj(){
var instance = null;
return function(){
if(instance == null){
instance = {name:'simapleobj'}
}
return instance;
}
}
global.getInstance = SimpleObj();
})(window)
調(diào)用:
getInstance(); //{name: "simapleobj"}
var a = getInstance();
console.log(a); //{name: "simapleobj"}
var b = getInstance();
console.log(b); //{name: "simapleobj"}
a.name = 'ACE';
console.log(a); //{name: "ACE"}
console.log(b); //{name: "ACE"}
var c = getInstance();
console.log(c);//{name: "ACE"}
getInstance();//{name: "ACE"}

QQ20180302-115554@2x.png
閉包,記住兩點(diǎn):1.函數(shù)在當(dāng)前詞法作用域之外執(zhí)行;2.函數(shù)可以記住并訪問所在的詞法作用域。