Rumah > hujung hadapan web > tutorial js > Mengapa Menggunakan Penutupan Menyelesaikan Masalah Gelung dan Penutupan JavaScript?

Mengapa Menggunakan Penutupan Menyelesaikan Masalah Gelung dan Penutupan JavaScript?

Barbara Streisand
Lepaskan: 2024-12-22 22:25:19
asal
461 orang telah melayarinya

Why Does Using Closures Solve JavaScript's Loop-and-Closure Problem?

Isu Gelung Terkenal JavaScript Selesai dengan Penutupan

Pertimbangkan kod berikut bertujuan untuk menjana lima pautan dengan peristiwa makluman unik untuk memaparkan ID masing-masing:

function addLinks() {
    for (var i=0, link; i<5; i++) {
        link = document.createElement("a");
        link.innerHTML = "Link " + i;
        link.onclick = function () {
            alert(i);
        };
        document.body.appendChild(link);
    }
}
Salin selepas log masuk

Walau bagaimanapun, kod ini gagal mencapai tujuannya, kerana mengklik mana-mana pautan memaparkan "pautan 5." Untuk membetulkannya, kod yang diubah suai berikut berjaya memberikan setiap pautan ID uniknya:

function addLinks() {
    for (var i=0, link; i<5; i++) {
        link = document.createElement("a");
        link.innerHTML = "Link " + i;
        link.onclick = function (num) {
            return function () {
                alert(num);
            };
        }(i);
        document.body.appendChild(link);
    }
}
Salin selepas log masuk

Memahami Sihir Penutupan

Kunci kejayaan kod ini terletak pada konsep penutupan. Dalam JavaScript, penutupan ialah fungsi yang mengekalkan akses kepada persekitaran leksikal fungsi di mana ia dicipta. Dalam erti kata lain, ia boleh mengakses pembolehubah dan argumen yang ditakrifkan dalam fungsi luar, tanpa mengira skopnya sendiri.

Dalam coretan kod pertama, fungsi dalam merujuk pembolehubah i, yang dinaikkan ke bahagian atas skop fungsi. Apabila gelung berulang, pembolehubah i akan dikemas kini, dan fungsi dalaman sentiasa merujuk kepada nilai terkininya. Ini menyebabkan semua pautan memaparkan "pautan 5" apabila diklik.

Dalam coretan kod kedua, literal fungsi luar mencipta objek fungsi baharu dengan skopnya sendiri dan nombor pembolehubah setempat, yang nilainya ditetapkan kepada semasa nilai i. Objek fungsi dikembalikan sebagai pengendali acara untuk acara onclick pautan.

Yang penting, fungsi dalam dicipta dalam konteks persekitaran leksikal fungsi luar, yang termasuk nombor pembolehubah. Oleh itu, fungsi dalaman mempunyai akses berterusan kepada num dan mengembalikan fungsi yang memaklumkan ID yang betul apabila pautan diklik.

Pendekatan ini memastikan setiap pautan mempunyai penutupan uniknya sendiri, yang mengekalkan nilai yang betul bagi i walaupun selepas gelung telah ditamatkan.

Atas ialah kandungan terperinci Mengapa Menggunakan Penutupan Menyelesaikan Masalah Gelung dan Penutupan JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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