Adakah Kod JavaScript Rakan Anda Sebenarnya Menggunakan Penutupan?

Mary-Kate Olsen
Lepaskan: 2024-11-01 06:11:02
asal
449 orang telah melayarinya

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!