闭包

94 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

ES系列文章

闭包是什么

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' 只有 getName 和 setName 两个函数可以访问,外部无法访问,相对于将变量私有化。 一个前端小白,若文章有错误内容,欢迎大佬指点讨论!