Как вы наверняка знаете, ключевые слова 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;