Главная страница / Блог / Языки программирования / JavaScript / Чем отличаются const, var и let в JavaScript?

Чем отличаются const, var и let в JavaScript?

Как вы наверняка знаете, ключевые слова var, let и const используются для объявления переменных. Ранее мы с вами изучили все три способа и рассмотрели разницу между ними. В этой статье я хотел бы подытожить сказанное, так как об этом очень часто спрашивают новичков на собеседовании.

Итак, ключевые отличия между const, var и let это: возможность отложенного определения значения переменной, возможность переопределения значения, повторное объявление, соблюдение/игнорирование блочной области видимости и hoisting. А теперь подробнее.

Возможность отложенного определения значения переменной

const – значение должно быть определено при объявлении переменной (сразу).

const greeting = 'Hello world!';

var, let – значение может быть определено позже.

var greeting; 
greeting = 'Hello world!';

Возможность переопределения значения

const – значение у констант не переопределяются.

const greeting = 'Hello world!';
greeting = 'Hello Marry!'; // TypeError: Assignment to constant variable.

var, let – значение может быть переопределено в будущем.

let greeting = 'Hello world!';
greeting = 'Hello Mary!'; // value is 'Hello Mary!' now

Повторное объявление

const, let – не поддерживают повторное объявление.

let greeting = 'Hello world!';
let greeting = 'Hello Karl!'; // SyntaxError: Identifier 'greeting' has already been declared

var – поддерживает повторное объявление. Количество объявлений не ограничено.

var greeting = 'Hello world!';
var greeting = 'Hello Mary!'; // value is 'Hello Mary!' now

Соблюдение/игнорирование блочной области видимости

const, let – соблюдают блочную область видимости.

{
  const constVrb = 1;
  let letVrb = 2;
}

console.log(constVrb); // ReferenceError: constVrb is not defined
console.log(letVrb); // ReferenceError: letVrb is not defined

var – игнорирует блочную область видимости. Переменные, объявленные таким способом будут видны за пределами блока.

{
  var varVrb = 2;
}

console.log(varVrb); // 2

Hoisting

const, let – не поддерживают hoisting.

letVrb = 2; // ReferenceError: Cannot access 'letVrb' before initialization

let letVrb;

var – поддерживает hoisting. Объявление переменной поднимается вверх в пределах области видимости во время компиляции кода.

varVrb = 3;

var varVrb;
Russian
Прокрутить вверх