25:什么是 js 的闭包?有什么作用,用闭包写个单例模式

MDN 对闭包的定义是:闭包是指那些能够访问自由变量的函数,自由变量是指在函数中使用的,但既不是函数参数又不是函数的局部变量的变量,由此可以看出,闭包=函数+函数能够访问的自由变量,所以从技术的角度讲,所有 JS 函数都是闭包,但是这是理论上的闭包,还有一个实践角度上的闭包,从实践角度上来说,只有满足
1、即使创建它的上下文已经销毁,它仍然存在
2、在代码中引入了自由变量,才称为闭包

闭包的应用:

模仿块级作用域。2、保存外部函数的变量。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; 

})(); 

// 创建实例对象 1 

var a = new Singleton('a'); 

// 创建实例对象 2 

var b = new Singleton('b'); 

console.log(a===b);

你可能感兴趣的:(25:什么是 js 的闭包?有什么作用,用闭包写个单例模式)