Penutupan JavaScript adalah fitur pengembangan aktif dan pengembangan pasif. Dengan kata lain, di satu sisi, JS memiliki penutupan untuk menyelesaikan beberapa masalah dengan lebih baik. Di sisi lain, untuk menyelesaikan masalah tertentu, JS harus menggunakan penutupan untuk menyelesaikan masalah hampir tidak.
Yang pertama tidak dibahas di sini. Jika penutupan JS dapat menyelesaikan masalah dengan lebih baik, tentu saja, menggunakan penutupan lebih baik.
Apa yang saya diskusikan adalah yang terakhir karena keterbatasan JS itu sendiri, dan masalah yang harus diselesaikan dengan penutupan, seperti persyaratan "variabel hanya diinisialisasi sekali".
Bahasa konvensional menyelesaikan ini:
Salinan kode adalah sebagai berikut:
kelas kelas {
fungsi init () {
this.n = 0;
}
fungsi func () {
this.n ++;
kembalikan ini.n;
}
}
var obj = kelas baru ();
JavaScript umumnya diselesaikan dengan cara ini (menggunakan penutupan):
Salinan kode adalah sebagai berikut:
var obj = {
func: (function () {
var n = 0;
return function () {
n ++;
kembali n;
}
}) ()
}
Tetapi saya akan merekomendasikan metode ini (menghilangkan penutupan):
Salinan kode adalah sebagai berikut:
function class () {
var self = ini;
self.n = 0;
self.func = function () {
self.n ++;
mengembalikan diri.n;
}
}
var obj = kelas baru ();
Karena yang terakhir lebih terukur. Ketika Anda perlu mengimplementasikan operasi yang berbeda pada suatu variabel, yang terakhir hanya dapat mendefinisikan fungsi yang berbeda (yaitu, ekspansi linier sederhana), sedangkan yang pertama (penutupan) perlu sepenuhnya menulis ulang (inilah mengapa Anda sering mendengar kata refactoring).