如何將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中文網其他相關文章!