首頁 > web前端 > js教程 > 在 JavaScript 閉包中循環時,如何維護對唯一變數值的存取?

在 JavaScript 閉包中循環時,如何維護對唯一變數值的存取?

Susan Sarandon
發布: 2024-10-20 08:53:30
原創
920 人瀏覽過

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

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板