Bagaimana mendeklarasikan fungsi
Biasanya ada dua cara untuk menyatakan fungsi:
foo () {}; // Deklarasi fungsi var foo = function () {}; // Ekspresi fungsiPerbedaannya
1. Ekspresi fungsi dapat dieksekusi secara langsung dengan tanda kurung setelahnya
2. Deklarasi fungsi akan ditarik sebelumnya
Pra-analisis
Mari kita lihat contoh pertama:
foo (); // Fungsi deklarasi foo_later (); // foo_later bukan fungsi fungsi foo () {console.log ('deklarasi fungsi'); } var foo_later = function () {console.log ('function ekspresi'); }Seperti yang Anda lihat, deklarasi fungsi FOO sudah prepars, dan dapat dieksekusi di depan kode sendiri; Ekspresi fungsi Foo_later tidak bisa. Untuk mengatasi masalah ini, pertama -tama kita harus mencari tahu mekanisme kerja parser JavaScript.
Variabel boost (hoist)
Parser JavaScript akan mengangkat variabel dan deklarasi fungsi dalam ruang lingkupnya sendiri. Dengan kata lain, contoh di atas benar -benar dipahami dan diuraikan oleh parser ke dalam bentuk berikut:
function foo () {console.log ('Deklarasi fungsi'); } // Semua deklarasi fungsi adalah var foo_later lanjutan; // Ekspresi fungsi (deklarasi variabel) hanya memajukan variabel, dan operasi penugasan bukan foo canggih (); foo_later (); foo_later = function () {console.log ('function ekspresi'); }Ini juga dapat menjelaskan mengapa memanggil fungsi sebelum fungsi ekspresi mengembalikan kesalahan, karena belum ditetapkan, itu hanya variabel yang tidak terdefinisi dan tentu saja tidak dapat dieksekusi.
Demikian pula, kami juga dapat mencoba menebak output dari kode berikut:
Console.log (DecledLater); var DeclaredLater = "Sekarang didefinisikan!"; Console.log (DecledLater);
Kode ini dapat diuraikan ke dalam bentuk berikut:
var DeclaredLater; Console.log (DecledLater); // UndefinedDeclaredLater = "Sekarang didefinisikan!"; Console.log (DecledLater); // Sekarang sudah ditentukan!
Deklarasi variabel disebutkan terlebih dahulu (jadi tidak ada kesalahan dalam variabel yang akan dilaporkan), tetapi penugasan tidak maju, sehingga hasil output pertama tidak ditentukan.
Perlu dicatat itu
Karena deklarasi fungsi telah diisi sebelumnya, jangan gunakan metode ini untuk mendeklarasikan fungsi yang berbeda. Coba tebak output dari contoh berikut:
if (true) {function aaa () {alert ('1'); }} else {function aaa () {alert ('2'); }} aaa ();Tidak seperti yang kami harapkan, kode muncul dengan "2". Ini karena dua deklarasi fungsi telah diarahkan sebelum pernyataan IF dieksekusi, jadi pernyataan IF sama sekali tidak berguna. Ketika AAA () dipanggil, fungsi berikut dieksekusi secara langsung.
Meringkaskan
Melalui penjelasan di atas, kita dapat merangkumnya sebagai berikut:
• Deklarasi variabel maju ke atas ruang lingkup, dan penugasan tetap ada
• Fungsi deklarasi seluruh "sebelumnya"
• Ketika suatu fungsi ditetapkan ke variabel sebagai nilai, hanya variabel yang "maju", dan fungsinya tidak "maju".
Eksalisasikan lebih banyak dengan mempraktikkan contoh -contoh di atas. Juga, sebagai praktik terbaik: deklarasi variabel harus ditempatkan di bagian atas ruang lingkup/fungsi (JavaScript hanya memiliki ruang lingkup fungsi!).
Artikel di atas secara komprehensif memahami deklarasi fungsi, ekspresi fungsi, dan peningkatan variabel adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.