Analisis peristiwa dan kelebihan dan kekurangan kemahiran js closure_javascript

WBOY
Lepaskan: 2016-05-16 15:53:39
asal
1361 orang telah melayarinya

Pertama kod:

//函数a
function a()
{
var i=0;
//函数b
function b()
{
alert(++i);
}
return b;
}
//函数c
var c = a();
c();

Salin selepas log masuk

Ciri kod:

1. Fungsi b bersarang di dalam fungsi a; 2. Fungsi a mengembalikan fungsi b.
Apabila fungsi dalaman b fungsi a dalam kod dirujuk oleh pembolehubah c di luar fungsi a, ini dipanggil mencipta penutupan. Kadangkala fungsi b juga boleh dikembalikan oleh fungsi tanpa nama, iaitu fungsi pulangan(){};

Kelebihan: 1. Melindungi keselamatan pembolehubah dalam fungsi dan meningkatkan enkapsulasi 2. Mengekalkan pembolehubah dalam ingatan (menggunakan terlalu banyak akan menjadi kelemahan dan menduduki memori). Sebab mengapa penutupan menduduki sumber ialah apabila fungsi a tamat, pembolehubah i tidak akan dimusnahkan kerana fungsi a berakhir, kerana pelaksanaan b bergantung pada pembolehubah dalam a.
Tidak sesuai untuk senario: fungsi yang mengembalikan penutupan ialah fungsi yang sangat besar

Rangka kerja tipikal untuk penutupan mestilah jquery.

Penutupan ialah ciri utama bahasa JavaScript Kegunaan utama penutupan adalah untuk mereka bentuk kaedah dan pembolehubah peribadi.

Ini lebih jelas apabila membuat rangka kerja Sesetengah kaedah dan atribut hanya digunakan dalam proses logik operasi Anda tidak mahu membenarkan pengubahsuaian luaran atribut ini, jadi anda boleh mereka bentuk penutupan untuk hanya menyediakan akses kaedah.

Kelemahan penutupan ialah ia berada dalam ingatan, yang akan meningkatkan penggunaan memori Penggunaan yang tidak betul boleh menyebabkan kebocoran memori dengan mudah.

Untuk meringkaskan:

Kelebihan:

1. Kesinambungan logik apabila penutupan digunakan sebagai parameter panggilan fungsi lain, ia menghalang anda daripada melepaskan logik semasa dan menulis logik tambahan secara berasingan.

2. Memudahkan memanggil pembolehubah tempatan konteks.
3. Menguatkan enkapsulasi. Lanjutan titik 2 boleh melindungi pembolehubah.

Kelemahan:

Penutupan mempunyai masalah yang sangat serius, iaitu masalah sisa ingatan ini bukan sahaja kerana ia bermastautin dalam ingatan, tetapi yang lebih penting, penggunaan penutupan yang tidak betul akan menyebabkan penjanaan ingatan tidak sah :

var array = [];
function abc() {
var foo = function(){
}
array.push(foo);
return foo;
}
for(var i = 0 ; i < 10000; i ++)
{
abc();
}

alert(array[0] == array[1]);

Salin selepas log masuk
Melalui ujian di atas, kita akan melihat bahawa alamat penutupan logik yang sama yang dijana oleh pelaksanaan abc() sepuluh ribu kali tidak sama, yang bermaksud ia menghasilkan sekumpulan objek Fungsi yang sama, jadi terdapat Kelebihannya ialah anda boleh menggunakan mod kilang untuk menjana fungsi untuk digunakan Walau bagaimanapun, jika anda secara tidak sengaja menggunakan penutupan sebagai logik biasa, sampah memori pasti akan berlaku. Ia mungkin lebih mudah difahami jika anda menukar sintaks:

var foo = new Function();

Salin selepas log masuk
Jadi mengenai penutupan, setakat kebiasaan saya sendiri, saya tidak menggunakannya jika saya boleh Jika ia mesti digunakan, maka cari cara untuk memastikan bilangan objek penutupan kecil atau unik.

Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan