β

一个闭包还是三个闭包?

Freetao's Blog 239 阅读

2013-01-24_133245

截自:http://coolshell.cn/articles/6731.html

2013-01-24_133156

截自:https://developer.mozilla.org/zh-CN/docs/JavaScript/Guide/Closures#Creating_closures_in_loops_A_common_mistake

同样是循环中赋值函数,MDN解释中说“创建了三个闭包”而酷壳的文章说“绑定了同一个闭包”。

结合上下文,前者解释为三个闭包共享同一环境,而后者解释为三个函数绑定同一闭包。

前者所谓闭包=后者所谓函数,后者所谓闭包=前者所谓环境(作用域里的变量)。

再看看维基百科的说法

闭包Closure)是词法闭包Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

这样就比较明白了,闭包既包括函数也包括环境,所以两篇文章中的提法虽然貌似矛盾,其实也都是没错的。

分享本文到: 分享到新浪微博 分享到豆瓣网 分享到FaceBook 分享到Twitter

版权申明:

转载请注明作者、出处及原文链接:
转自:
http://Blog.Kainy.CN/2013/02/%e4%b8%80%e4%b8%aa%e9%97%ad%e5%8c%85%e8%bf%98%e6%98%af%e4%b8%89%e4%b8%aa%e9%97%ad%e5%8c%85%ef%bc%9f/
© 2010 作者及版权归属: Kainy @ Freetao's BLOG ® 联络作者:GT@Kainy.CN.

写于异年同日:

  1. 2010:  详解毕业后的档案等相关问题(0)
  2. 2010:  Windows7 情人节主题下载(1)
作者:Freetao's Blog
关♥生活,关注互联网。
原文地址:一个闭包还是三个闭包?, 感谢原作者分享。