你还理解闭包吗?Do you understand of closures ?

理解闭包吗?

这个问题其实在问:闭包

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

闭包是什么

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

按照个人理解就是:闭包 =『函数』和『函数体内可访问的变量总和』this

举个简单的例子:代理

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

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

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

闭包的做用

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

基于此特性,JavaScript能够实现私有变量、特权变量、储存变量等get

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

可是真正普遍流行的实际上是使用闭包。console

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 两个函数能够访问,外部没法访问,相对于将变量私有化。function

相关文章
相关标签/搜索