闭包是什么?

闭包的定义:

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。

我们来看以下代码,

function foo() {
    var a = 2;
    function bar() {
        console.log(a);
    }
    return bar;
}
var baz = foo();
baz() // 2
 

bar() 函数本身当作 一个值类型进行传递,显然,bar在自己定义的词法作用域以外的地方执行。

同时,拜闭包所赐,使得foo的内部作用域一直存活,不能被回收,以供bar()在之后的任何时间进行引用。bar()依然持有对该作用域的引用,这个引用就叫做闭包。

在定时器、事件监听器、 Ajax 请求、跨窗口通信、Web Workers 或者任何其他的异步(或者同步)任务中,只要使 用了回调函数,实际上就是在使用闭包!

 

posted @ 2023-04-01 22:39  heyujun-  阅读(24)  评论(0编辑  收藏  举报