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

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

Patricia Arquette
發布: 2024-12-01 07:16:21
原創
909 人瀏覽過

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

解決循環內單擊處理程序分配中的閉包問題

將單擊處理程序分配給循環中的多個元素時,由於JavaScript 中的閉包,會出現一個常見的陷阱。提供的程式碼顯示了此問題:

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

此程式碼旨在在發生點擊時顯示被點擊元素的索引。但是,每次點擊它都會錯誤地顯示“您點擊了 20”,而不是顯示實際索引。此行為源自於循環中所建立的閉包。

解決方案:使用回調函數

要解決此問題,我們可以使用回調函數,如下所示:

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 的let 關鍵字

如果ES6 語法可用,我們可以使用let 關鍵字可以更簡潔地實現相同的結果:

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

let 關鍵字確保'i' 的作用域是本地的循環,避免關閉問題並在每個元素啟動時顯示正確的點擊索引。

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

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