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