October 18

O’zgaruvchilar turlari va farqlari(var,let,const)


var

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

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

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
}