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 = { име: 'Друга Тест' }; // Грешка