JavaScript 闭包与匿名函数
匿名函数是 JavaScript 中的一个常见功能,经常出现在闭包的讨论中。然而,并非所有匿名函数都有资格成为真正的闭包。
定义闭包
JavaScript 中的闭包是一种特殊类型的匿名函数,它保留对即使外部作用域结束后,它仍然被创建。此功能允许闭包从外部作用域“捕获”变量的值,防止它们被垃圾收集。
案例研究:关闭变量
中在给定的代码示例中,两种解决方案都使用匿名函数来延迟计数器变量 i 的打印。
朋友的尝试
第一个示例中的代码似乎捕获了i 闭包内的变量。但是,它不满足闭包的定义,因为内部匿名函数 g 不继承外部函数 f 的词法作用域。因此, i 实际上并不是“闭合”。
<code class="javascript">for(var i = 0; i < 10; i++) { (function(){ var i2 = i; setTimeout(function(){ console.log(i2); }, 1000) })(); }</code>
编辑的尝试
第二个代码示例真正创建了一个闭包。外部函数 f 返回的匿名函数捕获 i2 变量并将其值保留在闭包的词法范围内。然后在 setTimeout 回调中调用这个闭包,确保访问 i 变量的原始值。
<code class="javascript">for(var i = 0; i < 10; i++) { setTimeout((function(i2){ return function() { console.log(i2); } })(i), 1000); }</code>
结论
在提供的代码中,编辑器的解决方案演示了如何正确使用闭包来捕获 i 变量的值。虽然这两种方案都有效解决了延迟打印的问题,但只有小编的方案才算技术意义上的闭包。
以上是JavaScript 中的匿名函数什么时候会变成闭包?的详细内容。更多信息请关注PHP中文网其他相关文章!