返回介绍

JavaScript 中的闭包(Closures)

发布于 2025-01-23 23:27:39 字数 1369 浏览 0 评论 0 收藏 0

这是对闭包主题的一个简单介绍,闭包是理解 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 重用于两只不同的 dog:

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!

如您所见,变量 say 的状态与从 prepareBark() 返回的函数相关联。

还要注意我们第二次调用 prepareBark() 时重新定义一个新的 say 变量,但这不会影响第一个 prepareBark() 作用域的状态。

这就是闭包的工作原理:返回的函数将保持作用域里的初始状态。

了解闭包更多知识请阅读: JavaScript 核心概念之作用域和闭包

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文