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:
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:
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!