首頁 >web前端 >js教程 >在循環中使用事件監聽器時如何將正確的變數值傳遞給函數?

在循環中使用事件監聽器時如何將正確的變數值傳遞給函數?

DDD
DDD原創
2024-10-25 08:23:29969瀏覽

How to Pass the Correct Variable Value to a Function When Using Event Listeners in Loops?

如何將JS 變數值傳遞給函數

迭代數組並為每個元素添加事件監聽器時,循環的值計數器變數可能不會如預期保留。偵聽器不捕獲當前值,而是在循環終止後使用最終值。要解決此問題並將實際值(而不是引用)傳遞給函數,請考慮以下方法:

現代瀏覽器:

利用let 或const 關鍵字宣告區塊作用域變數:

<code class="javascript">for (let i = 0; i < results.length; i++) {
  let marker = results[i];
  google.maps.event.addListener(marker, 'click', () => change_selection(i));
}</code>

舊版瀏覽器:

建立一個單獨的作用域,透過將變數作為參數傳遞給巢狀函數來保留變數的值:

<code class="javascript">for (var i = 0; i < results.length; i++) {
  (function (i) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() {
      change_selection(i);
    });
  })(i);
}</code>

透過使用匿名函數並將變數作為參數傳遞,您可以有效地將其值傳遞給函數並建立一個閉包。這確保每個偵聽器在建立時都可以存取正確的值。

以上是在循環中使用事件監聽器時如何將正確的變數值傳遞給函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn