Pengangkatan JavaScript dan deklarasi cakupan global
Dalam javascript, tahap kompilasi menemukan dan mengasosiasikan semua deklarasi dengan cakupan yang sesuai.
KASUS 1
a = 2;
console.log(a);
Jika tidak digunakan dalam mode ketat, cuplikan dianggap benar-benar diproses sebagai:
var a;
a = 2;
console.log(a);
Hasil: 2
KASUS2
jika deklarasi terjadi di bawah console.log ()
console.log(a);
var a = 2;
Di sini, di baris 1: compiler akan memeriksa deklarasi a dalam cakupannya jika tidak ditemukan, cakupan global akan menetapkan satu dan kode yang sama akan diasumsikan lagi sama seperti
var a;
console.log(a);
a = 2;
Output: undefined // karena tidak ada nilai yang diberikan saat interpreter membaca konsol
KASUS3
console.log(a);
a = 2;
Keluaran: RefErr
Mengapa ini melempar kesalahan referensi dan tidak terdefinisi?
Jawaban
Jika Anda memperhatikan dua kasus pertama dengan cermat, Anda selalu mendeklarasikan variabel a, dan di JavaScript hanya deklarasi yang diangkat.
Karena itu, dalam Case 3variabel, Anda atidak pernah dideklarasikan, oleh karena itu, pengangkatan tidak dimungkinkan di sini. Dengan itu, tidak ada variabel dengan nama adalam ruang lingkup, dan karenanya ReferenceError,.
Jika Anda melihat deskripsi ReferenceError , itu berbunyi:
Objek ReferenceError mewakili kesalahan ketika variabel yang tidak ada direferensikan.
Global implisit tidak menyiratkan varpernyataan. Tidak ada yang mengangkat mereka.