Skip to content
登录后刷题更便捷

什么是闭包(closure),为什么使用闭包?

难度:

闭包是函数和声明该函数的词法环境的组合。词法作用域中使用的域,是变量在代码中声明的位置所决定的。闭包是即使被外部函数返回,依然可以访问到外部(封闭)函数作用域的函数。

可以这样理解:闭包 =『函数』和『函数体内可访问的变量总和』

举个简单的例子:

js
(function () {
  var a = 1;
  function add() {
    var b = 2;

    var sum = b + a;
    console.log(sum); // 3
  }
  add();
})();

add函数本身,以及其内部可访问的变量,即 a = 1,这两个组合在一起就被称为闭包,仅此而已。

为什么使用闭包?

闭包最大的作用就是隐藏变量,闭包的一大特性就是内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后

基于此特性,JavaScript 可以实现私有变量、特权变量、储存变量等

我们就以私有变量举例,私有变量的实现方法很多,有靠约定的(变量名前加_),有靠 Proxy 代理的,也有靠 Symbol 这种新数据类型的。

但是真正广泛流行的其实是使用闭包。

js
function Person() {
  var name = "cxk";
  this.getName = function () {
    return name;
  };
  this.setName = function (value) {
    name = value;
  };
}

const cxk = new Person();

console.log(cxk.getName()); //cxk
cxk.setName("jntm");
console.log(cxk.getName()); //jntm
console.log(name); //name is not defined

函数体内的 var name = 'cxk'只有 getNamesetName 两个函数可以访问,外部无法访问,相对于将变量私有化。

参考

内容仅供参考,难免有不恰当的地方,如果有问题欢迎及时反馈
部分内容来自网络,如果不慎侵犯您的权益,请联系我们,以便及时删除侵权内容