Sobes.tech
Junior

Какви начини има за обявяване на променливи в JavaScript? Посочете разликите между тези методи.

sobes.tech AI

Отговор от AI

В JavaScript можете да обявите променливи по три начина: var, let, const.

Различията между тях:

Разлика var let const
Обхват на видимост Функционален Блоков Блоков
Преназначаване Възможно Възможно Невъзможно
Хойстинг Повдига декларацията и инициализацията към undefined Повдига декларацията, но не и инициализацията Повдига декларацията, но не и инициализацията

Примери:

// var
function exampleVar() {
  var x = 10; // Функционален обхват
  if (true) {
    var x = 20; // Възможно е преназначаване вътре в същата функция
    console.log(x); // 20
  }
  console.log(x); // 20 (променливата x от if е достъпна тук)
}

console.log(x); // Грешка: ReferenceError: x не е дефинирана (x не е видима извън функцията)

// Хойстинг var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exampleLet() {
  let y = 10; // Блоков обхват
  if (true) {
    let y = 20; // Възможно е преназначаване в рамките на същия блок
    console.log(y); // 20 (друга променлива y)
  }
  console.log(y); // 10 (променливата y извън блока)
}

console.log(y); // Грешка: ReferenceError: y не е дефинирана

// Хойстинг let
// console.log(b); // Грешка: ReferenceError: Не може да се достъпи 'b' преди инициализация
let b = 5;
console.log(b); // 5
// const
function exampleConst() {
  const z = 10; // Блоков обхват
  // z = 20; // Грешка: TypeError: Присвояване към константна променлива. (Преназначаване не е възможно)
  if (true) {
    const z = 20; // Възможно е преназначаване в рамките на същия блок
    console.log(z); // 20 (друга променлива z)
  }
  console.log(z); // 10 (променливата z извън блока)
}

console.log(z); // Грешка: ReferenceError: z не е дефинирана

// Хойстинг const
// console.log(c); // Грешка: ReferenceError: Не може да се достъпи 'c' преди инициализация
const c = 5;
console.log(c); // 5

// За обекти и масиви, обявени чрез const, може да се променя съдържанието им
const obj = { име: 'Тест' };
obj.име = 'Нов Тест'; // Разрешено
// obj = { име: 'Друга Тест' }; // Грешка