從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中文網其他相關文章!