Sobes.tech
Junior

var, let və const arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

var funksional sahəyə malikdir, letconst 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, letconst 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 ]