O'zgaruvchi ko'rinadimi?
Ushbu kodning natijasi qanday bo’ladi?
let x = 1;
function func() {
console.log(x); // ?
let x = 2;
}
func();
P.S. Bu vazifada tuzoq bor. Yechim ayniq emas.
Natija: xato.
Buni ishga tushirib ko’ring:
let x = 1;
function func() {
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 2;
}
func();
Ushbu misolda biz “mavjud bo’lmagan” va “ishga tushirilmagan” o’zgaruvchi o’rtasidagi g’alati farqni kuzatishimiz mumkin.
O'zgaruvchi doirasi, yopilish (closure) maqolasida o’qiganimizdek, o’zgaruvchi ijro kod blokiga (yoki funktsiyaga) kirgandan boshlab “ishga tushirilmagan” holatda boshlanadi. Va u tegishli let
ifodagacha ishga tushirilmagan qoladi.
Boshqacha qilib aytganda, o’zgaruvchi texnik jihatdan mavjud, lekin let
dan oldin ishlatilmaydi.
Yuqoridagi kod buni ko’rsatadi.
function func() {
// mahalliy x o'zgaruvchisi funktsiya boshidanoq mexanizmga ma'lum,
// lekin let gacha "ishga tushirilmagan" (foydalanib bo'lmaydigan) ("o'lik zona")
// shuning uchun xato
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 2;
}
O’zgaruvchining vaqtinchalik foydalanib bo’lmaydigan bu zonasi (kod bloki boshidan let
gacha) ba’zan “o’lik zona” (dead zone) deb ataladi.