首页 > web前端 > js教程 > 正文

在循环函数中访问外部变量时如何避免闭包问题?

Barbara Streisand
发布: 2024-10-20 08:55:30
原创
611 人浏览过

How to Avoid Closure Issues when Accessing External Variables in Loop Functions?

在循环闭包中访问外部变量

在 JavaScript 中,当从循环内访问闭包外部的变量时,您可能会遇到以下问题:始终返回变量的最后一个值。发生这种情况是因为变量随着每次循环迭代而变化,并且闭包捕获其最终值。

要解决此问题,可以采用闭包技术来确定循环内变量的范围。以下闭包创建一个函数,该函数返回另一个限定变量范围的函数:

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"> <img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(
        (function (item) {
            return function () {
                alert(item.id);
                self.switchto(item.id);
            };
        })(item)
    );
}</code>
登录后复制

在此示例中,在循环内创建一个匿名函数,封装变量项。该函数会立即使用 item 参数进行调用,从而导致闭包,其中 item 的作用域位于每个单击处理程序内。

或者,jQuery 提供 $.each() 函数,该函数简化了循环迭代并消除了这种情况下的关闭:

<code class="javascript">$.each(this.items, function (i, item) {
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"> <img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(function () {
        alert(item.id);
        self.switchto(item.id);
    });
});</code>
登录后复制

以上是在循环函数中访问外部变量时如何避免闭包问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!