首頁 > web前端 > js教程 > 在循環中分配點擊處理程序時如何避免閉包陷阱?

在循環中分配點擊處理程序時如何避免閉包陷阱?

Susan Sarandon
發布: 2024-11-29 03:47:09
原創
1036 人瀏覽過

How Can I Avoid Closure Pitfalls When Assigning Click Handlers in Loops?

常見陷阱:循環中的閉包

使用循環將點擊處理程序分配給多個元素時,很容易陷入無意陷阱中造成封閉。這可能會導致意外行為,如所提供的 JavaScript 程式碼所示。

在給定的範例中,問題在於每個元素的點選處理程序函數。透過將其包含在循環中,我們創建了一個引用循環中變數 i 的閉包。但是,由於 i 隨著每次迭代而變化,因此當單擊事件發生時,它始終會存取 i 的最終值(在本例中為 20),而不是特定元素的預期值。

解決方案:

為了避免這種關閉問題,有必要建立一個封裝所需值的回調函數。使用立即呼叫函數表達式(IIFE),我們可以實現這一點:

function createCallback(i) {
  return function () {
    alert('you clicked ' + i);
  };
}

$(document).ready(function () {
  for (var i = 0; i < 20; i++) {
    $('#question' + i).click(createCallback(i));
  }
});
登入後複製

透過這種方法,回調函數捕獲每次循環迭代的i 的當前值,確保將正確的值傳遞給點擊處理程序。

ES6 的現代解決方案:

在 ES6 中, let 關鍵字可用於為每次循環迭代建立局部變數。這消除了使用回調函數的解決方法的需要:

for (let i = 0; i < 20; i++) {
  $('#question' + i).click(function () {
    alert('you clicked ' + i);
  });
}
登入後複製

此解決方案更加簡潔,並且避免了在循環中處理單擊事件時出現關閉問題的可能性。

以上是在循環中分配點擊處理程序時如何避免閉包陷阱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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