闭包

Closures are functions that refer to independent (free) variables (variables that are used locally, but defined in an enclosing scope). In other words, these functions 'remember' the environment in which they were created. --- MDN

看不懂上面的英文这么办,下面是中文翻译

闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)。换句话说,这些函数可以“记忆”它被创建时候的环境。

关于闭包已经有很多很多的文章了,文章的最后会放一些链接,在这里我只写以下几点

  • 闭包的实现是因为Js中有函数作用域,变量查询是一级一级查询上去,直到根作用域也就是说在任何一级的作用域中都可以访问之前所有作用域连的变量,同时内存回收机制是不会回收还被引用的变量。
  • 闭包不是实现Js类的基础,但是可以通过闭包实现类的私有变量和私有函数
  • 闭包的性能很差,有时候可以绑定在prototype中(只可以访问this下的变量)
//在这个例子中firstName和LastName不想直接被外界访问,同时可以使用闭包使外界获取到值,
//同时函数尽量绑定在prototype上,所以getFullName绑定在prototype上,
//所以我个人认为在这样的情况下,一些用于访问私有变量的基础函数可以使用闭包,
//大多数类函数可以绑定在prototype中,通过可以访问私有变量的基础函数来实现访问私有变量
var Man = function(){
  var firstName = 'wang';
  var LastName = 'yuekai';
  this.getFirstName = function(){
    return firstName;
  }
  this.getLastName = function(){
    return LastName;
  }
}

Man.prototype.getFullName = function(){
  return this.getFirstName() + this.getLastName()
} 

其他文献
学习Javascript闭包(Closure)
闭包

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容