Scope (Cakupan) adalah seperangkat aturan yang menentukan di mana variabel Anda tinggal dan di mana mereka dapat diakses. Hoisting (Pengangkatan) adalah bagaimana mesin mengaturnya sebelum menjalankan kode.
Analogi Cermin Satu Arah
Pikirkan scope seperti Jendela Mobil Berkaca Gelap:
• Dari Dalam ke Luar: Jika Anda di dalam mobil (Function Scope), Anda bisa melihat semua yang ada di luar (Global Scope).
• Dari Luar ke Dalam: Jika Anda di luar, Anda tidak bisa melihat apa yang terjadi di dalam mobil. Variabel di dalam bersifat pribadi.
Rantai Scope
Saat Anda menggunakan variabel, JavaScript mencarinya di ruangan saat ini. Jika tidak ada di sana, ia mencari di ruangan luar. Ia terus naik sampai mencapai Global scope.
const globalUser = "Admin";
function outer() {
const outerVar = "Saya di tengah";
function inner() {
const innerVar = "Saya jauh di dalam";
// 1. Cari di 'inner'? Tidak.
// 2. Cari di 'outer'? Ya! Ketemu.
console.log(outerVar);
// 1. Cari di 'inner'? Tidak.
// 2. Cari di 'outer'? Tidak.
// 3. Cari di Global? Ya!
console.log(globalUser);
}
inner();
}
outer();Hoisting: Variabel "Hantu"
Hoisting bukan sihir; itu adalah kompiler yang melakukan "putaran pertama" untuk menemukan semua deklarasi variabel sebelum menjalankan kode.
Perilaku variabel selama Hoisting
function: Diangkat sepenuhnya. Anda bisa memanggilnya sebelum mendefinisikannya.var: Diangkat tetapi diinisialisasi sebagaiundefined.let / const: Diangkat tetapi ditempatkan di Temporal Dead Zone (TDZ). Menyentuhnya akan membuat aplikasi crash.
// 1. Fungsi aman digunakan sebelumnya
sayHello();
function sayHello() {
console.log("Saya bekerja karena saya diangkat!");
}
// 2. Var berbahaya
console.log(myVar); // undefined (Bukan error, hanya kosong)
var myVar = 10;
// 3. Let/Const meledak
try {
console.log(myLet);
} catch(e) {
console.error("TDZ Error:", e.message);
}
let myLet = 20;