Junior
var, let və const arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
var funksional sahəyə malikdir, let və const isə blok sahəsinə malikdir. var yenidən elan edilə və təyin edilə bilər, let isə yenidən təyin edilə bilər, lakin eyni sahədə yenidən elan edilə bilməz, const isə nə yenidən elan edilə, nə də yenidən təyin edilə bilər. var ilə elan edilən dəyişənlər hoisting (yüksəldilmə) ilə undefined dəyəri ilə başlanır, let və const da hoisting olunur, lakin onlar "müvəqqəti ölü zona"da qalır və yalnız ilkinləşdirildikdə istifadə edilə bilər.
// var funksional sahəyə malikdir
function misalVar() {
if (true) {
var x = 10;
console.log(x); // 10
}
console.log(x); // 10 (x burada görünür)
}
// let və const blok sahəsinə malikdir
function misalLetConst() {
if (true) {
let y = 20;
const z = 30;
console.log(y); // 20
console.log(z); // 30
}
// console.log(y); // Xəta ReferenceError: y təyin edilməyib
// console.log(z); // Xəta ReferenceError: z təyin edilməyib
}
// var yenidən elan edilə və təyin edilə bilər
var a = 1;
var a = 2; // Yenidən elan
a = 3; // Yenidən təyin
console.log(a); // 3
// let yenidən təyin edilə bilər, lakin eyni sahədə yenidən elan edilə bilməz
let b = 4;
// let b = 5; // Sintaksis xətası: 'b' artıq elan edilib
b = 6; // Yenidən təyin
console.log(b); // 6
// const nə yenidən təyin edilə, nə də elan edilə bilər
const c = 7;
// const c = 8; // Sintaksis xətası: 'c' artıq elan edilib
// c = 9; // TypeError: Sabit dəyişənə təyin edilə bilməz
console.log(c); // 7 (primitiv tiplər üçün)
// Yüksəldilmə (hoisting)
console.log(hoistedVar); // undefined (var yüksəldilib və undefined ilə başlanıb)
var hoistedVar = "Mən varam";
// console.log(hoistedLet); // Xəta ReferenceError: 'hoistedLet' əvvəlcə istifadə edilə bilməz
// let hoistedLet = "Mən letəm"; // Müvəqqəti ölü zonada
Əsas fərqlər cədvəldə qısaca verilmişdir:
| Xüsusiyyət | var |
let |
const |
|---|---|---|---|
| Sahə | Funksional | Blok | Blok |
| Yenidən elan edilə bilər | Bəli | Xeyr (eyni sahədə) | Xeyr |
| Yenidən təyin edilə bilər | Bəli | Bəli | Xeyr |
| Yüksəldilmə | Bəli (müəyyən edilənlərlə) | Bəli (müvəqqəti ölü zona) | Bəli (müvəqqəti ölü zona) |
| Başlanğıcda təyin | Təyin edilməyə ehtiyac yoxdur | Təyin edilməyə ehtiyac yoxdur | Təyin edilməlidir |
const ilə elan edilən obyekt və massivlərdə, dəyişən öz-özlüyündə başqa obyektə və ya massivə təyin edilə bilməz, lakin obyekt və ya massiv içərisindəki məlumatlar dəyişdirilə bilər.
const obyekt = { açar: 'dəyər' };
// obyekt = { yeniAçar: 'yeniDəyər' }; // TypeError: Təyin edilən dəyişənə təyin edilə bilməz
obyekt.açar = 'yeniDəyər'; // Mümkündür
console.log(obyekt); // { açar: 'yeniDəyər' }
const massiv = [1, 2];
// massiv = [3, 4]; // TypeError: Təyin edilən dəyişənə təyin edilə bilməz
massiv.push(3); // Mümkündür
console.log(massiv); // [ 1, 2, 3 ]