什么是闭包?

南山隐士 2022年06月25日 24 0

闭包很多人都说闭包是一个函数,但是我的理解它是一个对象,其实您可以通过debugger在控制台中可以看到它是一个对象,它包含了被引用的局部变量

控制台中一个名为Closure的对象就是闭包,您可以看到它有2个属性,就是我相应的变量名(key)以及变量的值(value)

Closure.png

那么闭包是如何产生的呢?

闭包的产生需要满足3个条件

第一个条件函数必须嵌套,也就是要产生闭包,必须最少需要有2个函数(可以看到上图中,的确是有2个函数)

第二个条件就是引用了我外部函数的局部变量(可以看到上图中,inner函数引用了外部函数的相应变量)

第三个条件就是必须调用我外部的函数

闭包的作用是什么呢?

闭包的作用主要是通过作用域链让我内部的函数可以访问到外部函数的局部变量,或者让我的全局坏境能引用到内部函数的变量(具体您可以举例给面试官听),都是为了延长我变量的生命周期,因为没有闭包的存在,我的函数执行完毕,局部变量就会给释放!

闭包的弊端

东西都是有利弊的,虽然闭包能延长变量的生命周期,但是我函数执行完后, 函数内的局部变量没有释放就会造成内存泄露,解决的办法是,将其设置null

 function fn(){
    let yaojin = '遥近';
    function me(){
        console.log(yaojin)
    }
    return me;
 }
let test = fn();   //指向的对象会一直保存在堆内存中
test = null; // 若不再使用,则让其指向的对象为空
Last Updated: 2022/06/25 18:59:51
Electron通信, 打开页面 谈谈this 的指向