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.
javascript
hoisting
Xlaudius
sumber
sumber
div
di jQueryJawaban:
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.
sumber
Pencipta JS Brendan Eich pernah berkata (di Twitter) :
Dia juga menjelaskan bahwa…
Apakah ada bahasa populer lain yang melakukan ini?
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 .
sumber
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
untukexecution 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
danclass
deklarasi, juga prioritas berikut antara variabel dan fungsi.sumber