Adakah Fungsi Tanpa Nama Sentiasa Ditutup dalam JavaScript?

Susan Sarandon
Lepaskan: 2024-11-01 11:02:30
asal
328 orang telah melayarinya

Are Anonymous Functions Always Closures in JavaScript?

Penutupan lwn. Fungsi Tanpa Nama dalam JavaScript

Penutupan JavaScript telah menjadi subjek kekeliruan bagi sesetengah pembangun. Walaupun semua fungsi JavaScript adalah penutupan, subset tertentu adalah kepentingan teori tertentu. Artikel ini bertujuan untuk menjelaskan konsep dan menentukan mana antara dua blok kod yang menggunakan penutupan dengan tepat.

Memahami Penutupan:

Penutupan ialah fungsi yang menangkap dan mengekalkan akses kepada pembolehubah daripada skop yang disertakan, walaupun selepas skop itu tidak lagi aktif. Pada dasarnya, penutupan ialah fungsi yang mempunyai memori dan boleh mengakses data daripada skop induknya, dikenali sebagai "pembolehubah skop induk" atau "nilai atas."

Mengenalpasti Penutupan:

Untuk menentukan sama ada fungsi ialah penutupan, kita mesti memeriksa pembolehubahnya. Fungsi yang tidak mempunyai pembolehubah bukan setempat (iaitu, pembolehubah bebas bebas) tidak boleh menjadi penutup. Fungsi dengan pembolehubah bukan setempat mesti dirujuk dari luar skop induknya untuk menjadi penutup.

Kes 1: Program Rakan

<code class="javascript">for(var i = 0; i < 10; i++) {
    (function(){
        var i2 = i;
        setTimeout(function(){
            console.log(i2);
        }, 1000)
    })();
}</code>
Salin selepas log masuk

Dalam kes ini, fungsi tidak mempunyai sebarang pembolehubah skop induk tertutup dan oleh itu bukan penutupan. Walau bagaimanapun, fungsi dalaman yang dihantar ke setTimeout ialah penutupan kerana ia menangkap dan mengekalkan akses kepada pembolehubah bebas i2.

Kes 2: Program Pengarang

<code class="javascript">for(var i = 0; i < 10; i++) {
    setTimeout((function(i2){
        return function() {
            console.log(i2);
        }
    })(i), 1000);
}</code>
Salin selepas log masuk

Di sini , fungsi dalaman mengekalkan akses kepada pembolehubah bebas i2 dan kekal sebagai penutupan walaupun dirujuk di luar skop induknya.

Kesimpulan:

Dalam kedua-dua kes, penutupan digunakan . Program pengarang menggunakan penutupan untuk menangkap nilai i. Dengan mengembalikan fungsi lain dan menghantarnya ke setTimeout, fungsi dalaman boleh mengakses pembolehubah tertutup i2. Ini memastikan bahawa nilai yang betul dicetak ke konsol selepas kelewatan.

Atas ialah kandungan terperinci Adakah Fungsi Tanpa Nama Sentiasa Ditutup dalam 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!