首页 >web前端 >js教程 >如何从 JavaScript 闭包访问循环中的外部变量?

如何从 JavaScript 闭包访问循环中的外部变量?

Patricia Arquette
Patricia Arquette原创
2024-10-20 08:57:31878浏览

How to Access Outside Variables in Loops from JavaScript Closures?

从 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn