Javascript闭包

来源:互联网 发布:淘宝卖家如何借贷 编辑:程序博客网 时间:2024/06/06 18:56

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)
闭包

0 0