闭包

62 阅读1分钟

前言

闭包在javascript中一直占据着非常重要的地位,但是晦涩难懂。我们对该概念没有一个清晰、明了的认识,即使我们代码中遍布着闭包,但也是被动的,不能根据自己意愿使用。
在此,就让我们来了解一下什么是闭包?

什么是闭包

当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。
由此可见,常用的闭包就是我们写的回调函数。

示例1

函数bar存在用foo的词法作用域中,被函数foo返回了出去,保持着对foo作用域的引用

function foo() {
  const a = 2;

  function bar() {
    console.log(a);
  }

  return bar;
}

const baz = foo();
baz(); // 这就是闭包