JavaScript let kalit so'zi
let kalit so'zi ES6 (2015) versiyasida joriy qilingan.
let yordamida e'lon qilingan o'zgaruvchilarning asosiy xususiyatlari:
- Blok qamroviga (Block Scope) ega.
- Ishlatishdan oldin e'lon qilinishi shart.
- Bir xil qamrovda qayta e'lon qilib bo'lmaydi.
Blok Qamrovi (Block Scope)
ES6 (2015) gacha JavaScript-da Blok qamrovi mavjud emas edi. Unda faqat Global qamrov va Funksiya qamrovi bor edi.
let va const kalit so'zlari JavaScript-ga Blok qamrovini olib kirdi.
Misol
{ } bloki ichida e'lon qilingan o'zgaruvchilarga blok tashqarisidan murojaat qilib bo'lmaydi:
{
let x = 2;
}
// x ni bu yerda ishlatib bo'lmaydiFunksiya Qamrovi (Function Scope)
Funksiya ichida e'lon qilingan barcha o'zgaruvchilar (var, let yoki const) Funksiya qamroviga ega bo'ladi:
Misol
function myFunction() {
var x = 1;
let y = 2;
const z = 3;
}
// x, y va z ni bu yerda (funksiya tashqarisida) ishlatib bo'lmaydiGlobal Qamrov (Global Scope)
var kalit so'zi bilan e'lon qilingan o'zgaruvchilar har doim Global qamrovga ega bo'ladi (agar funksiya ichida bo'lmasa). Ular blok qamroviga ega bo'la olmaydi:
Misol
{
var x = 2;
}
// x ni bu yerda (blok tashqarisida) ISHLATISH MUMKINQayta e'lon qilib bo'lmaydi
let bilan aniqlangan o'zgaruvchilarni bir xil qamrovda qayta e'lon qilib bo'lmaydi. Bu tasodifiy xatolarning oldini oladi.
Noto'g'ri usul
let x = "John Doe";
let x = 0; // Xatolik: 'x' allaqachon e'lon qilinganvar bilan esa buni qilish mumkin:
Misol (Tavsiya etilmaydi)
var x = "John Doe";
var x = 0; // Bu xatolik bermaydiO'zgaruvchilarni qayta e'lon qilishdagi muammolar
var yordamida o'zgaruvchini blok ichida qayta e'lon qilish blok tashqarisidagi o'zgaruvchiga ham ta'sir qiladi:
Misol
var x = 10;
// Bu yerda x = 10
{
var x = 2;
// Bu yerda x = 2
}
// Bu yerda x = 2 (ta'sir qildi)let bu muammoni hal qiladi. Blok ichidagi o'zgaruvchi tashqaridagisiga ta'sir qilmaydi:
Misol
let x = 10;
// Bu yerda x = 10
{
let x = 2;
// Bu yerda x = 2
}
// Bu yerda x = 10 (ta'sir qilmadi)var, let va const o'rtasidagi farqlar
| Xususiyat | var | let | const |
|---|---|---|---|
| Blok qamrovi | Yo'q | Ha | Ha |
| Qayta e'lon qilish | Ha | Yo'q | Yo'q |
| Qiymatni qayta biriktirish | Ha | Ha | Yo'q |
| Hoisting (Yuqoriga ko'tarish) | Ha | Ha (lekin uninitialized) | Ha (lekin uninitialized) |
this ga bog'lanish | Ha | Yo'q | Yo'q |
Brauzerlar tomonidan qo'llab-quvvatlanishi
let va const kalit so'zlari Internet Explorer 11 va undan eski versiyalarda ishlamaydi. Zamonaviy brauzerlarning barchasi ularni to'liq qo'llab-quvvatlaydi.
Let va Hoisting (Yuqoriga ko'tarish)
var bilan e'lon qilingan o'zgaruvchilar yuqoriga ko'tariladi (hoisted) va istalgan vaqtda ishlatilishi mumkin:
Misol
Bu to'g'ri ishlaydi:
carName = "Volvo";
var carName;let bilan e'lon qilingan o'zgaruvchilar ham blokning yuqorisiga ko'tariladi, lekin ular ishga tushirilmaydi (initialized).
Xatolik
let o'zgaruvchisini e'lon qilishdan oldin ishlatish ReferenceError xatoligiga olib keladi:
carName = "Saab";
let carName = "Volvo"; // ReferenceError