首頁  >  文章  >  web前端  >  將參數傳遞給循環內的函數時如何保留變數值?

將參數傳遞給循環內的函數時如何保留變數值?

Linda Hamilton
Linda Hamilton原創
2024-10-24 22:00:30254瀏覽

How to Preserve Variable Values When Passing Arguments to Functions Inside Loops?

向函數傳遞參數時保留變數值

使用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中文網其他相關文章!

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