从 JavaScript 闭包访问循环中的外部变量
访问循环内声明的变量时会出现问题,特别是稍后引用此类变量时在异步回调中。为了举例说明,请考虑以下代码片段:
<code class="javascript">for (var i in this.items) { var item = this.items[i]; // ... }</code>
在这种情况下,item 变量将随着每次循环迭代而改变。当稍后引用 item 时,它将保存数组中最后一项的值。
解决方案:使用闭包
解决此问题的方法包括使用闭包,它创建返回其他函数的函数。通过使用闭包,item 变量的作用域可以不同,如下所示:
<code class="javascript">for (var i in this.items) { var item = this.items[i]; // ... $("#showcasebutton_"+item.id).click( (function(item) { return function() { alert(item.id); self.switchto(item.id); }; })(item) ); }</code>
替代方案:jQuery 的 $.each() Helper
如果 jQuery 可用, $.each() 帮助器可以用作简单 for/each 循环的简写。由于作用域在其函数调用中的工作方式,它减少了对闭包的需求:
<code class="javascript">$.each(this.items,function(i, item) { // ... $("#showcasebutton_"+item.id).click(function() { alert(item.id); self.switchto(item.id); }); });</code>
以上是如何从 JavaScript 闭包访问循环中的外部变量?的详细内容。更多信息请关注PHP中文网其他相关文章!