Walaupun penutupan merupakan idea asas dalam JavaScript, pendatang baharu mungkin mendapati ia kabur dan mencabar untuk difahami. Secara khusus, definisi piawaian ECMA boleh mencabar untuk difahami tanpa sebarang pengalaman dunia sebenar. Akibatnya, kami akan memudahkan anda memahami dengan menggunakan kod sebenar daripada menjelaskan tanggapan penutupan dalam siaran ini.
function A(name){ function B(){ console.log(name); } return B; } var C = A("Closure"); C();//Closure
Ini adalah penutupan yang paling mudah.
Sekarang kita tahu asasnya, mari kita semak secara ringkas bagaimana ini berbeza daripada fungsi biasa. Berikut ialah cara kod yang disebutkan di atas muncul apabila diterjemahkan ke dalam bahasa semula jadi:
Satu pernyataan boleh merangkumi lima operasi ini:
Fungsi B dalam fungsi A dan nama pembolehubah dirujuk oleh pembolehubah C di luar fungsi A.
Dengan sedikit pengubahsuaian, pernyataan ini mentakrifkan penutupan seperti berikut:
Apabila fungsi dalam dirujuk oleh pembolehubah di luar fungsi luar, penutupan terbentuk.
Oleh itu, melaksanakan lima operasi di atas mentakrifkan penutupan.
Sebelum kita memahami penggunaan penutupan, mari kita fahami mekanisme GC (Pengumpulan Sampah) JavaScript.
Dalam JavaScript, apabila objek tidak lagi dirujuk, ia akan dituntut semula oleh GC, jika tidak, ia akan terus disimpan dalam ingatan.
Dalam contoh di atas, B bergantung pada A kerana B ditakrifkan dalam A, dan A secara tidak langsung dirujuk oleh C kerana pembolehubah luaran C merujuk B.
Iaitu, A tidak akan dikumpul oleh GC dan akan terus disimpan dalam ingatan. Untuk membuktikan alasan ini, mari kita perbaiki sedikit contoh di atas.
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3
Mengapa kiraan tidak ditetapkan semula?
Mekanisme penutupan:
Oleh itu, jika anda mentakrifkan beberapa pembolehubah dalam modul dan ingin menyimpan pembolehubah ini dalam ingatan tetapi tidak "mencemarkan" pembolehubah global, anda boleh mentakrifkan modul ini menggunakan penutupan.
Atas ialah kandungan terperinci [JavaScript] Fahami penutupan dalam beberapa saat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!