乐趣区

关于javascript:你还理解闭包吗Do-you-understand-of-closures

了解闭包吗?

这个问题其实在问:

  1. 闭包是什么?
  2. 闭包有什么作用?

闭包是什么

MDN 的解释:闭包是函数和申明该函数的词法环境的组合。

依照我的了解就是:闭包 =『函数』和『函数体内可拜访的变量总和』

举个简略的例子:

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

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

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

闭包的作用

闭包最大的作用就是暗藏变量,闭包的一大个性就是 外部函数总是能够拜访其所在的内部函数中申明的参数和变量,即便在其内部函数被返回(寿命终结)了之后

基于此个性,JavaScript 能够实现公有变量、特权变量、贮存变量等

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

然而真正宽泛风行的其实是应用闭包。

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 两个函数能够拜访,内部无法访问,绝对于将变量私有化。

退出移动版