var, let, const o'rtasidagi farq nimada?
JuniorJavaScript #javascript #variables
Savol
var, let va const bir-biridan nimasi bilan farq qiladi?
Qisqa javob
var — funksional ko'rinish sohasi, undefined bilan initsializatsiya qilinib ko'tariladi (hoisting), qayta e'lon qilish mumkin. let/const — blokli ko'rinish sohasi, e'lon qilinguncha "temporal dead zone"ga tushadi. const qo'shimcha ravishda o'zgaruvchini qayta o'zlashtirishni taqiqlaydi.
Batafsil javob
- Ko'rinish sohasi:
vare'lon qilingan funksiyaning butun hududida ko'rinadi ({},if,forbloklarini e'tiborsiz qoldiradi).let/constfaqat e'lon qilingan blok ichida ko'rinadi. - Hoisting (ko'tarilish): barcha e'lonlar kompilyatsiya bosqichida ko'rinish sohasining boshiga ko'tariladi, lekin turlicha xatti-harakat qiladi:
varko'tariladi va darholundefinedsifatida initsializatsiya qilinadi — e'lon qilingan qatorgacha unga murojaat qilish mumkin,undefinedolasiz.let/constham ko'tariladi, lekin temporal dead zone (TDZ) ga tushadi — e'lon qilinguncha murojaat qilishReferenceErrortashlaydi.
- Qayta e'lon qilish:
varbir xil ko'rinish sohasida xatosiz qayta e'lon qilinishi mumkin.let/const— mumkin emas (SyntaxError). - Qayta o'zlashtirish:
var/letqayta o'zlashtirilishi mumkin.const— mumkin emas, urinishTypeErrortashlaydi. Muhim:consto'zgaruvchining o'zini qayta o'zlashtirishni taqiqlaydi, lekin u havola qilayotgan obyekt/massivning mutatsiyasini taqiqlamaydi.
Misol
console.log(a) // undefined (hoisting)
var a = 1
console.log(b) // ReferenceError (TDZ)
let b = 2
const obj = { count: 0 }
obj.count++ // OK — obyektni mutatsiya qilyapmiz, o'zgaruvchini qayta o'zlashtirmayapmiz
obj.count = 5 // OK
obj = {} // TypeError: Assignment to constant variable
if (true) {
var x = 'funksiya-doirasida'
let y = 'blok-doirasida'
}
console.log(x) // 'funksiya-doirasida'
console.log(y) // ReferenceError: y is not defined
Qo'shimcha savollar
- Temporal dead zone nima va u nima uchun kerak?
- Nega zamonaviy kodda
vardeyarli ishlatilmaydi? constorqali e'lon qilingan massivning mazmunini o'zgartirish mumkinmi?