首頁  >  文章  >  web前端  >  如何在 JavaScript 事件監聽器中保留變數值:區塊作用域變數或閉包?

如何在 JavaScript 事件監聽器中保留變數值:區塊作用域變數或閉包?

Linda Hamilton
Linda Hamilton原創
2024-10-28 08:05:29304瀏覽

How to Preserve Variable Values in JavaScript Event Listeners: Block-Scoped Variables or Closures?

如何在JavaScript 中保留事件監聽器中的變數值

考慮以下程式碼片段:

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

In這段程式碼中,事件監聽器中使用的i 值始終是循環終止後results.length 的最終值。要解決此問題,我們需要在建立事件監聽器時將 i 的值傳遞給事件監聽器。

使用區塊作用域變數(ES6 及更高版本)

中現代瀏覽器中,我們可以使用區塊作用域變量,例如 let 或 const。這些變數只能在定義它們的區塊內存取。透過使用區塊作用域變量,我們可以確保保留事件創建時 i 的值。
<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>

建立閉包(舊版瀏覽器)

在不支援區塊作用域變數的舊版瀏覽器中,我們可以建立一個閉包來保留i 的值。閉包是一個封裝另一個函數的函數,建立一個巢狀的作用域。透過將 i 作為第一個參數傳遞給匿名函數,我們可以建立一個保留 i 值的閉包。
<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>

透過使用區塊範圍變數或閉包技術,我們可以確保每個事件監聽器都使用預期的 i 值。

以上是如何在 JavaScript 事件監聽器中保留變數值:區塊作用域變數或閉包?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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