向函數傳遞參數時保留變數值
使用JavaScript 循環時,您可能會遇到需要保留以下值的情況將變數傳遞給函數時。當變數的值在循環執行期間可能發生變化時,就會出現這種情況,從而導致事件偵聽器出現意外行為。
請考慮以下範例:
<code class="js">for (var i = 0; i < results.length; i++) { marker = results[i]; google.maps.event.addListener(marker, 'click', function() { change_selection(i); }); }
在此程式碼中,事件偵聽器是附加到循環內的每個標記。但是,當觸發偵聽器時,它使用 i 的最終值,即循環結束時結果陣列的長度。這種行為是不可取的,因為它會導致所有事件偵聽器使用相同的值。
要為每個偵聽器保留i 的值,您可以使用區塊範圍變數(在現代瀏覽器中)或閉包(在
現代瀏覽器(ES6 ):
<code class="js">for (let i = 0; i < results.length; i++) { let marker = results[i]; google.maps.event.addListener(marker, 'click', () => change_selection(i)); }</code>
使用let 關鍵字建立一個只能在循環內存取的區塊範圍變數。 🎜>
舊版瀏覽器:
<code class="js">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 作為第一個參數建立一個閉包。 ,確保每個事件偵聽器為其特定標記使用正確的值。
以上是將參數傳遞給循環內的函數時如何保留變數值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!