O’zgaruvchilar turlari va farqlari(var,let,const)
var
- Global holatda elon qilinsa window
objectiga yozilib ketadi.Bu esa window obectida malum bolgan nomlar bilan elon qilinganda ular o’z vazifasini bajarmasligiga olib keladi.Masalan: Confirm
, alert
, console
kabilar agar shunga o'xshash oldindan bor nomlar bilan elon qilinsa ular o'z vazifasini bajarmaydi.Buning oldini olish uchun IIFE(Immediately Invoked Function Expression)
ishlatilgan.
var alert = function(){} // bu global object da mavjud var alert = 'example' // loyihada elon qilindi // endi alert nomli function yoq chunki uni string ga tenglab qo'yildi. // alert ishlatmoqchi bo'linsa hatolik beradi.
TDZ(pastda to'liq) ga amal qilmaydi yani ishlamaydi bunga dalil var
hoistingda undefined
qabul qilishi TDZ ga ko’ra variable elon qilinishidan oldin ishlatilmasligi kerak edi let
const
larda hoisting reference error
qaytaradi.
Redeclering ishlaydi(bitta kalit so’z bilan ikkita o'zgaruvchi elon qilsa boladi).Oxiri berilganini qabul qilib ketaveradi(let va const da bunday emas).
var age = 22 var age = 23 // bu holatda hech qanday hatolik qaytarmaydi age ni ishlatmoqchi bo'lsak // age 23 qiymatiga teng hisoblanadi yani oxirgi elon qilinganini olaveradi
Function scope da ishlaydi yani uni faqat function scope ushlab qololadi.Boshqa scope da elon qilinganda aytilganidek global objectga yozilib ketadi.
const - bu o'zgarmas.Block
scope ni qabul qiladi yani { } harqanday jingalak qavslardan chiqib ketolmaydi.
if(true){ const age = 22 } console.log(age) // Referens error: age not found
Hoisting da ishlaydi lekin Referens error: before instalisation xatoligini qaytaradi.
faqat bir marta qiymat biriktiriladi reassignable
qilish imkoni yo'q
Let - ES6 da taqdim etilgan o'zgaruvchi. Block
scopeni qabul qiladi.Hoisting da ishlaydi o'zini huddi const dek tutadi.
Reassignable
hususyati ishlaydi yani qayta qiymat biriktirish mumkun.
TDZ (Tempororal dead zone) -> Bu let va const ning shu scope boshidan to ularni e’lon qilingan qatorigacha bo’lgan vaqt oraliqi.
if(true){ // TDZ start alert(age) age is temporary dead // TDZ end let age = 22 }