在循环闭包中访问外部变量
在 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中文网其他相关文章!