前端闭包:什么是闭包, 闭包有什么特性?

315 阅读2分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

这里讲一下前端js闭包的简单概念

就像一本书放在书包里面,那书包就是一个闭包,这个比如非常恰当,闭包的功能:1.在函数范围之外访问函数内部的值 ,2.保持引用,不被垃圾回收机制回收

image.png

我们才一段代码开始理解闭包

function a(){
    b();
    function b(){
        c();
        function c(){
            console.log("我在里面");
        }
    }
}
a(); //我在里面

这里讲一下 JavaScript是单线程的 单线程的意思就是说一次只能做一件事情,这段代码就像薯片罐,一次吃一片最后到最底部 就是数据结构里面的--栈结构

image.png

想必大家都知道这段代码是不能执行的

function demo(){
    var a = 111
}
demo();
console.log(a);

但是内部可以访问函数之外的变量

function demo(){
    var a = 111
    return function(){
        console.log(a);
    }
}
console.log(demo());  //这里我们返回的是个匿名函数

结论就是这个return返回的匿名函数,它就是主角。 “闭包”

但是我们怎么用这个闭包呢?很简单,我们来看一段代码

function demo(){
    var a = 111
    return function(){
        console.log(a);
    }
}
// console.log(demo()); //匿名函数
let _demo = demo();
_demo();//111

这样,在函数之外,我们就能访问这个函数变量,为什么呢? 我们知道简单数据类型是保存在栈里面的, function是一个复杂数据类型是保存在堆里面的,堆里面都保存这对象,对象是引用传递,这里demo()赋值给_demo(),_demo里面保存的是一个对这个匿名函数的地址引用

这就是闭包的简单概念!如果有什么说的不对的地方希望大家能指出来,再次感谢各位大佬