如何在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); }); }
使用區塊作用域變數(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>
以上是如何在 JavaScript 事件監聽器中保留變數值:區塊作用域變數或閉包?的詳細內容。更多資訊請關注PHP中文網其他相關文章!