Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengelakkan Isu Penutupan apabila Mengakses Pembolehubah Luaran dalam Fungsi Gelung?

Bagaimana untuk Mengelakkan Isu Penutupan apabila Mengakses Pembolehubah Luaran dalam Fungsi Gelung?

Barbara Streisand
Barbara Streisandasal
2024-10-20 08:55:30692semak imbas

How to Avoid Closure Issues when Accessing External Variables in Loop Functions?

Mengakses Pembolehubah Luaran dalam Penutupan Gelung

Dalam JavaScript, apabila mengakses pembolehubah di luar penutupan dari dalam gelung, anda mungkin menghadapi isu di mana nilai terakhir pembolehubah dikembalikan secara konsisten. Ini berlaku kerana pembolehubah berubah dengan setiap lelaran gelung dan penutupan menangkap nilai akhirnya.

Untuk menyelesaikan masalah ini, teknik penutupan boleh digunakan untuk merangkumi pembolehubah dalam gelung. Penutupan berikut mencipta fungsi yang mengembalikan fungsi lain yang merangkumi pembolehubah:

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"> <img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(
        (function (item) {
            return function () {
                alert(item.id);
                self.switchto(item.id);
            };
        })(item)
    );
}</code>

Dalam contoh ini, fungsi tanpa nama dicipta dalam gelung, merangkum item pembolehubah. Fungsi ini segera dipanggil dengan parameter item, menghasilkan penutupan di mana item diliputi dalam setiap pengendali klik.

Sebagai alternatif, jQuery menyediakan fungsi $.each(), yang memudahkan lelaran gelung dan menghapuskan keperluan untuk penutupan dalam senario ini:

<code class="javascript">$.each(this.items, function (i, item) {
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"> <img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(function () {
        alert(item.id);
        self.switchto(item.id);
    });
});</code>

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Penutupan apabila Mengakses Pembolehubah Luaran dalam Fungsi Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn