Rumah > Artikel > hujung hadapan web > Fungsi tanpa nama JavaScript meniru kemahiran scope_javascript peringkat blok
Fungsi tanpa nama
Fungsi ialah objek paling fleksibel dalam JavaScript Di sini kami hanya menerangkan penggunaan fungsi tanpa namanya.
Fungsi tanpa nama: Ia adalah fungsi tanpa nama fungsi.
Takrif fungsi, mula-mula memperkenalkan secara ringkas definisi fungsi, yang boleh dibahagikan secara kasar kepada tiga cara
Jenis pertama: Ini juga yang paling konvensional
function double(x){ return 2 * x; }
Kaedah kedua: Kaedah ini menggunakan pembina Fungsi dan menganggap kedua-dua senarai parameter dan badan fungsi sebagai rentetan Ini sangat menyusahkan dan tidak disyorkan.
var double = new Function('x', 'return 2 * x;');
Jenis ketiga:
var double = function(x) { return 2* x; }
Ambil perhatian bahawa fungsi di sebelah kanan "=" ialah fungsi tanpa nama Selepas mencipta fungsi, fungsi itu diberikan kepada petak pembolehubah.
Tiada konsep skop peringkat blok dalam JavaScript. Dalam erti kata lain, pembolehubah yang ditakrifkan dalam penyataan peringkat blok sebenarnya dicipta dalam fungsi yang mengandungi (fungsi luaran) dan bukannya dalam penyataan.
function outputNumber(count){ for(var i=0;i<1000;i++){ alert(i); } alert(i); //count }
Untuk fungsi ini dalam bahasa seperti Java dan C#, pembolehubah i hanya akan ditakrifkan dalam pernyataan gelung untuk apabila gelung tamat, i akan dimusnahkan. Tetapi dalam JavaScript, pembolehubah i ditakrifkan dalam objek aktiviti outputNumber(), jadi ia boleh diakses di dalam fungsi sebaik sahaja ia ditakrifkan. Walaupun anda mengisytiharkan semula pembolehubah yang sama, nilainya tidak akan diubah.
function outputNumber(count){ for(var i=0;i<1000;i++){ alert(i); } var i; //重新声明变量 alert(i); //count }
Fungsi tanpa nama boleh digunakan untuk meniru skop peringkat blok dan mengelakkan masalah ini Sintaks fungsi tanpa nama yang digunakan sebagai skop peringkat blok (juga dipanggil skop peribadi) adalah seperti berikut:
(function(){ //这是块级作用域 })()
Takrifan kod di atas memanggil fungsi tanpa nama dan menyertakan pengisytiharan fungsi dalam kurungan, menunjukkan bahawa ia adalah ungkapan fungsi. Sepasang kurungan lain yang mengikutinya segera memanggil fungsi tersebut.
Pada bila-bila masa anda memerlukan beberapa pembolehubah buat sementara waktu, anda boleh menggunakan skop peribadi, contohnya:
function outputNumber(count){ (function(){ for(var i=0;i<1000;i++){ alert(i); })(); alert(i); //导致一个错误 }
Dengan cara ini, kami memasukkan skop peribadi di luar gelung untuk. Sebarang pembolehubah yang ditakrifkan dalam fungsi tanpa nama akan dimusnahkan pada akhir pelaksanaan.
Teknik ini sering digunakan fungsi luar dalam skop global untuk mengehadkan penambahan terlalu banyak pembolehubah dan fungsi pada skop global.
Secara umum, kita harus cuba meminimumkan penambahan pembolehubah dan fungsi pada skop global.
Pendekatan ini boleh mengurangkan masalah penutupan yang menduduki memori, kerana tiada rujukan kepada fungsi tanpa nama, dan rantai skopnya boleh dimusnahkan serta-merta selagi fungsi itu dilaksanakan.