Rumah  >  Artikel  >  hujung hadapan web  >  Adakah Kod JavaScript Rakan Anda Sebenarnya Menggunakan Penutupan?

Adakah Kod JavaScript Rakan Anda Sebenarnya Menggunakan Penutupan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 06:11:02452semak imbas

Is Your Friend's JavaScript Code Actually Using Closures?

Penutupan JavaScript lwn. Fungsi Tanpa Nama

Soalan:

Dalam perbincangan tentang penutupan dalam JavaScript, seorang rakan mendakwa bahawa pelaksanaan mereka tidak mempunyai penutupan, manakala yang lain berpendapat sebaliknya. Bolehkah anda menentukan penyelesaian yang menggunakan penutupan dengan menggunakan konsep penutupan?

Penyelesaian:

Definisi Penutupan: Penutupan dalam JavaScript merujuk kepada subset fungsi dengan pembolehubah bebas (pembolehubah ditakrifkan dalam skop induk) yang dirujuk daripada skop yang berbeza. Apabila penutupan dirujuk di luar skop induknya, penutupan itu menutup atas nilai atas (pembolehubah bebas) daripada skop tersebut.

Kes 1: Program Rakan Anda

<code class="js">for (var i = 0; i < 10; i++) {
    (function f() {
        var i2 = i;
        setTimeout(function g() {
            console.log(i2);
        }, 1000);
    })();
}</code>

Analisis:

  • Fungsi f bukan penutup kerana semua pembolehubah bebas (i, setTimeout dan konsol) terikat pada skop global dan tiada satu pun daripadanya ditutup over.
  • Fungsi g, walau bagaimanapun, adalah penutup kerana ia menutup ke atas pembolehubah i2, yang terikat pada skop f. Apabila g dirujuk dari dalam setTimeout, ia mengekalkan akses kepada i2.

Kes 2: Program Anda

<code class="js">for (var i = 0; i < 10; i++) {
    setTimeout((function f(i2) {
        return function g() {
            console.log(i2);
        };
    })(i), 1000);
}</code>

Analisis:

  • Fungsi f bukan penutup kerana ia tidak mempunyai pembolehubah bebas.
  • Fungsi g, bagaimanapun, adalah penutupan kerana ia menutup atas pembolehubah i2, yang terikat kepada skop f. Apabila g dirujuk dari dalam setTimeout, ia mengekalkan akses kepada i2.

Kesimpulan:

Kedua-dua anda dan rakan anda menggunakan penutupan dalam pelaksanaan anda. Perbezaannya ialah dalam program rakan anda, penutupan dibuat dalam fungsi dalaman g, manakala dalam program anda, penutupan dibuat dalam fungsi luar f.

Atas ialah kandungan terperinci Adakah Kod JavaScript Rakan Anda Sebenarnya Menggunakan Penutupan?. 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