В JavaScript существуют три ключевых слова для объявления переменных: var, let и const. Они имеют различную область видимости и возможность изменения значения переменной.

  1. var - был первым ключевым словом для объявления переменных в JavaScript. Переменные, объявленные с помощью var, имеют область видимости на уровне функции или на уровне глобальной области видимости. Значение переменной может быть изменено в любой части функции или глобальной области видимости.
    • Переменные, объявленные с помощью var, не имеют блочной области видимости и могут быть доступны за пределами функции, в которой они объявлены.
    • Если переменная var объявлена внутри функции, но не в блоке кода, то ее область видимости будет на уровне функции.
    • Если переменная var объявлена за пределами функции, то ее область видимости будет на уровне глобальной области видимости.
    • Переменные, объявленные с помощью var, могут быть переназначены в любой точке программы.
  2. let - был добавлен в ECMAScript 6 (ES6) и обладает блочной областью видимости. Переменные, объявленные с помощью let, имеют область видимости на уровне блока кода, такого как цикл for или условный оператор if. Значение переменной может быть изменено в любой части блока кода.
    • Переменные, объявленные с помощью let, имеют блочную область видимости, что означает, что они доступны только внутри блока кода, в котором они объявлены.
    • Переменные, объявленные с помощью let, не могут быть переобъявлены в том же блоке кода.
    • Переменные, объявленные с помощью let, могут быть переназначены в любой точке блока кода.
  3. const - также был добавлен в ES6 и также имеет блочную область видимости. Однако, переменные, объявленные с помощью const, не могут быть переназначены после их объявления. Значение переменной должно быть установлено при объявлении и не может быть изменено в любой другой части кода.
    • Переменные, объявленные с помощью const, также имеют блочную область видимости.
    • Переменные, объявленные с помощью const, не могут быть переобъявлены в том же блоке кода.
    • Переменные, объявленные с помощью const, не могут быть переназначены после их объявления.
    • Объекты и массивы, объявленные с помощью const, могут быть изменены, но не могут быть переопределены.
// Hoisting (Поднятие)
console.log(a); // ReferenceError: Cannot access 'a' before initialization
console.log(b); // ReferenceError: Cannot access 'b' before initialization
console.log(c); // undefined, так как var поднимается, но не инициализируется
let a = 10; // let имеет блочную область видимости и не поднимается
const b = 20; // const имеет блочную область видимости и не поднимается
var c = 30; // var поднимается, но инициализируется как undefined
 
// Блочная область видимости для let и const
if (true) {
    let a = 10; // Локальная переменная в блоке if
    const b = 20; // Локальная константа в блоке if
    var c = 30; // var игнорирует блоки и имеет функциональную область видимости
}
 
console.log(a); // ReferenceError: a is not defined, так как let ограничивает область видимости блоком
console.log(b); // ReferenceError: b is not defined, так как const ограничивает область видимости блоком
console.log(c); // 30, так как var имеет функциональную область видимости
 
// let и const
let name = 'Yauhen'; // let позволяет изменять значение переменной
const channel = 'webDev'; // const не позволяет изменять значение переменной после инициализации
name = 'Jack'; // Это работает, так как let позволяет переназначение
channel = 'IT'; // TypeError: Assignment to constant variable, так как const запрещает переназначение

Назад