Javascript闭包

Closures (闭包)是使用被作用域封闭的变量,函数,闭包等执行的一个函数的作用域。通常我们用和其相应的函数来指代这些作用域。(可以访问独立数据的函数)

闭包是一个函数和函数所声明的词法环境的结合

—-MDN是这么解释Javascript闭包的

一个很教科书的定义。此外也有比较通俗的解释和比喻。

1. 在StackOverflow上有很通俗详细的讨论和解释[How do JavaScript closures work?],就不做搬运工了。

2. 还有一个很有意思的PDF,关于闭包的解释 [secrets_of_javascript_closures]

3. 阮大的文章[学习Javascript闭包(Closure)],主要从变量作用域入手分析解释闭包,可参考文章最后的两个对比案例:

在阅读和理解三篇文章之后,回过头再去理解和温习MDN的解释和例子。

总结:

闭包的来源感觉来自于Javascript的特性:变量赋值,变量可以是方法。这种操作融合了面向对象语言中“委托”和“反射”的概念。

这种写法随之而来的就是变量作用域的问题,比如最常引发的局部变量上升为“全局变量”的效果(如参考内容1中的Example3)。

那么如何准确认梳理某个闭包内部函数、变量作用域?可参考阮大的思路:利用this变量,也可阅读参考内容2中对that和this的对比分析。

 

You Might Also Like
发表评论

%d 博主赞过: