在学习闭包的时候,想看看闭包如何来实现一个单例模式,可是发现网上百度出来的基本上用闭包实现的单例模式都是错误的,大概都是copy来copy去的吧。下面是自己的实现,大家可根据自己的需求在此基础上变通以满足自己的业务需求。
定义:
(function (global){
function SimpleObj(){
var instance = null;
return function(){
if(instance == null){
instance = {name:'simapleobj'}
}
return instance;
}
}
global.getInstance = SimpleObj();
})(window)
调用:
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"}
闭包,记住两点:1.函数在当前词法作用域之外执行;2.函数可以记住并访问所在的词法作用域。