你还理解闭包吗?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 两个函数可以访问,外部无法访问,相对于将变量私有化。

你可能感兴趣的:(javascript,html5)