22什么是js的闭包?有什么作用,用闭包写个单例模式
MDN对闭包的定义是:闭包是指那些能够访问自由变量的函数,自由变量是指在函数中使用的,但既不是函数参数又不是函数的局部变量的变量,由此可以看出,闭包=函数+函数能够访问的自由变量,所以从技术角度讲,所有JS函数都是闭包,但是这是理论上的闭包,还有一个实践角度上的闭包,从实践角度上来说,只有满足1、即使创建它的上下文已经销毁,它仍然存在,2、在代码中引入了自由变量,才称为闭包闭包的应用:1、模仿块级作用域2、保存外部函数的变量3、封装私有变量单例模式:varSingleton=(function(){varinstance;varCreateSingleton=function(name){this.name=name;if(instance){returninstance;}//打印实例名字this.getName();//instance=this;//returninstance;returninstance=this;}//获取实例的名字CreateSingleton.prototype.getName=function(){console.log(this.name)}returnCreateSingleton;})();//创建实例对象1vara=newSingleton('a');//创建实例对象2varb=newSingleton('b');console.log(a===b);
来自:JavaScript语言-闭包相关