Mengapa variabel kerekan JavaScript?
Apa alasan para desainer ketika mereka memutuskan untuk menerapkan hoisting? Apakah ada bahasa populer lain yang melakukan ini?
Harap berikan tautan yang relevan ke dokumentasi dan / atau catatan.
Mengapa variabel kerekan JavaScript?
Apa alasan para desainer ketika mereka memutuskan untuk menerapkan hoisting? Apakah ada bahasa populer lain yang melakukan ini?
Harap berikan tautan yang relevan ke dokumentasi dan / atau catatan.
div
di jQuery
Jawaban:
Seperti yang dijelaskan Stoyan Stefanov dalam buku "Pola JavaScript", pengangkatan tersebut merupakan hasil dari penerapan penerjemah JavaScript.
Interpretasi kode JS dilakukan dalam dua lintasan. Selama lintasan pertama, interpreter memproses deklarasi variabel dan fungsi.
Pass kedua adalah langkah eksekusi kode yang sebenarnya. Penerjemah memproses ekspresi fungsi dan variabel yang tidak dideklarasikan.
Jadi, kita dapat menggunakan konsep "mengangkat" untuk menggambarkan perilaku tersebut.
"var hoisting dengan demikian [sebuah] konsekuensi yang tidak diinginkan dari fungsi mengangkat, tidak ada lingkup blok, [dan] JS sebagai pekerjaan terburu-buru 1995."
"function hoisting memungkinkan dekomposisi program dari atas ke bawah, 'let rec' gratis, panggil sebelum mendeklarasikan; var hoisting dengan tag bersama."
Saya tidak tahu bahasa populer lainnya yang mengangkat variabel dengan cara yang sama. Saya pikir bahkan ActionScript - implementasi lain dari ECMAScript yang digunakan dalam pengembangan Flash - tidak menerapkan pengangkatan. Ini telah menjadi sumber kebingungan dan frustrasi bagi pengembang yang terbiasa dengan bahasa lain yang mempelajari JavaScript.
PEMBARUAN: Dari komentar, Python memiliki perilaku mengangkat variabel yang serupa .
Ini karena juru bahasa javascript menafsirkan kode dalam dua siklus.
Dalam siklus 1 semua variabel dan fungsi deklarasi dibawa ke atas ruang lingkup fungsi itu mengeksekusi dalam. Hal ini membantu dalam menciptakan variableObjects
untuk execution context
fungsi bahkan sebelum eksekusi itu.
Pada fase ke-2, penetapan nilai, pernyataan kode, dan pemanggilan fungsi dilakukan baris demi baris dengan cara yang diharapkan.
Anda memiliki bacaan lebih rinci di sini.
Ini akan memberi Anda gambaran yang lebih baik seputar perilaku di sekitar let
, const
dan class
deklarasi, juga prioritas berikut antara variabel dan fungsi.