【发布时间】:2013-03-25 22:51:50
【问题描述】:
我正在阅读 cmets 的答案并看到 this comment:
[闭包] 不会持久化 foo 的状态,而是创建一个包含 (1) 返回函数和 (2) 返回时引用的所有外部变量的特殊范围。这种特殊的作用域称为闭包。
好的,到目前为止一切顺利。现在这是我不知道的有趣部分:
恰当的例子...如果您在 foo 中定义了另一个在返回函数中未引用的 var,则它不会存在于闭包范围内。
我想这是有道理的,但这除了内存使用/性能之外还有什么含义?
问题 -- 如果范围内的所有变量都包含在闭包中,那我可以做哪些我无法用当前模型做的事情?
【问题讨论】:
-
第二个引用不一定正确。至少在理论上存在一个“未使用”的闭包,但它可能会被删除(比如为了优化),因为它没有被使用。 ECMA-262 没有定义实现,只定义行为,所以如果一个闭包从未使用过,你怎么知道它是否存在? :-) ECMAScript 中的 每个 函数都可以为其外部执行上下文创建一个闭包,至少是全局上下文。
-
为什么这个问题被标记为重复?自从它被回答/接受以来没有真正的伤害,但它确实是一个与链接问题不同的问题。并非所有关于 Stack Overflow 的闭包问题都可以与“闭包如何工作?”重复。在这种情况下,对该问题的最高投票答案并未直接解决该问题所关注的问题。我希望没有人足够关心重新开放,但关闭对我来说似乎很仓促。
-
它没有被标记为重复 - 这只是指向该答案的链接。
标签: javascript closures