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
Lepaskan: 2024-10-20 08:55:30
asal
690 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan