Pertama kod:
//函数a function a() { var i=0; //函数b function b() { alert(++i); } return b; } //函数c var c = a(); c();
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.
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.
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]);
var foo = new Function();
Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.