JavaScript闭包说明

对闭包主题的简要介绍,是了解JavaScript函数如何工作的关键

如果您曾经写过功能在JavaScript中,您已经利用了闭包

这是一个重要的主题,对您可以做的事情有影响。

当一个函数运行时,它会被执行定义时的范围, 和不是具有当它处于适当状态时的状态被执行

范围基本上是可见的变量集。

一个函数记住它词汇范围,并且能够访问在父作用域中定义的变量。

简而言之,一个函数具有可访问的全部变量。

让我立即举一个例子来澄清这一点。

const bark = dog => {
  const say = `${dog} barked!`
  ;(() => console.log(say))()
}

bark(Roger)

这记录到控制台Roger barked!,正如预期的那样。

如果您想返回该操作怎么办:

const prepareBark = dog => {
  const say = `${dog} barked!`
  return () => console.log(say)
}

const bark = prepareBark(Roger)

bark()

此代码段也记录到控制台Roger barked!

让我们做最后一个例子,该例子可以重用prepareBark两只不同的狗:

const prepareBark = dog => {
  const say = `${dog} barked!`
  return () => {
    console.log(say)
  }
}

const rogerBark = prepareBark(Roger) const sydBark = prepareBark(Syd)

rogerBark() sydBark()

此打印

Roger barked!
Syd barked!

As you can see, the state of the variable say is linked to the function that’s returned from prepareBark().

Also notice that we redefine a new say variable the second time we call prepareBark(), but that does not affect the state of the first prepareBark() scope.

This is how a closure works: the function that’s returned keeps the original state in its scope.


More js tutorials: