JavaScript 中的闭包(Closures) – JavaScript 完全手册(2018版)
栏目: JavaScript · 发布时间: 7年前
内容简介:小编推荐:
小编推荐: 掘金是一个面向 程序员 的高质量技术社区,从 一线大厂经验分享到前端开发最佳实践,无论是入门还是进阶,来掘金你不会错过前端开发的任何一个技术干货。
注:本文为 《 JavaScript 完全手册(2018版) 》第19节,你可以查看该手册的完整目录。
这是对闭包主题的一个简单介绍,闭包是理解 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 核心概念之作用域和闭包
如果你觉得本文对你有帮助,那就请分享给更多的朋友
关注「前端干货精选」加星星,每天都能获取前端干货
以上所述就是小编给大家介绍的《JavaScript 中的闭包(Closures) – JavaScript 完全手册(2018版)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大连接
[美] 尼古拉斯•克里斯塔基斯(Nicholas A. Christakis)、[美] 詹姆斯•富勒(James H. Fowler) / 简学 / 中国人民大学出版社 / 2013-1 / 59.90元
[内容简介] 1. 本书是继《六度分隔》之后,社会科学领域最重要的作品。作者发现:相距三度之内是强连接,强连接可以引发行为;相聚超过三度是弱连接,弱连接只能传递信息。 2. 本书讲述了社会网络是如何形成的以及对人类现实行为的影响,如对人类的情绪、亲密关系、健康、经济的运行和政治的影响等,并特别指出,三度影响力(即朋友的朋友的朋友也能影响到你)是社会化网络的强连接原则,决定着社会化网络的......一起来看看 《大连接》 这本书的介绍吧!