首页 >web前端 >js教程 >在 JavaScript 闭包中循环时,如何维护对唯一变量值的访问?

在 JavaScript 闭包中循环时,如何维护对唯一变量值的访问?

Susan Sarandon
Susan Sarandon原创
2024-10-20 08:53:30922浏览

When Looping in JavaScript Closures, How to Maintain Access to Unique Variable Values?

从 Javascript 闭包访问循环中的外部变量

在 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( 
                // create an anonymous function that will scope "item"
                (function(item) {
                   // that returns our function 
                   return function() {
                    alert(item.id);
                    self.switchto(item.id);
                   };
                })(item) // immediately call it with "item"
            );
    }

在此修改代码后,在循环的每次迭代中都会创建一个匿名函数,该函数将项目的当前值作为参数。这确保每个点击处理程序都有自己独特的 item 变量实例。

或者,可以使用 jQuery 的 $.each() 辅助函数来简化代码并消除对闭包的需要:

$.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);
  });
});

通过使用闭包或者jQuery的$.each(),我们可以确保循环的每次迭代都可以访问到自己唯一的变量值,解决了访问循环外的外部变量的问题。

以上是在 JavaScript 闭包中循环时,如何维护对唯一变量值的访问?的详细内容。更多信息请关注PHP中文网其他相关文章!

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