До прихода обновления EcmaScript 6 (в 2015 году) для объявления переменных использовалось слово «var». В ES6 были введены — «let» и «const».
Давайте разберемся для начала в общих чертах этих ключевых слов:
- Переменные объявленные этими ключевыми словами имеют, как глобальную, так и функциональную область видимости. Если переменная объявлена вне функции, то ее можно вызвать и внутри функции, но переменную созданную в функции, нельзя вызвать вне функции:
var test1 = 1;
function run() {
var test2 = 2;
console.log(test1); // 1
console.log(test2); // 2
}
run();
console.log(test1); // 1
console.log(test2); // ReferenceError: test2 is not defined
let test1 = 1;
function run() {
let test2 = 2;
console.log(test1); // 1
console.log(test2); // 2
}
run();
console.log(test1); // 1
console.log(test2); // ReferenceError: test2 is not defined
«const» будет вести себя так же.
А теперь разберем различия между ними:
VAR
- Переменная объявленная через «var» объявляются сразу при запуске программы и только потом ей присваивается значения. Чтобы это проверить, мы можем вызвать переменную до ее объявления, ее значение будет «undefined»:
console.log(test); // undefined
var test = "Hello, World!";
console.log(test); // "Hello, World!"
- Переменная с одним именем может быть переобъявлена несколько раз:
var test = 1;
console.log(test); // 1
var test = 2;
console.log(test); // 2
- Переменная может быть обновлена:
var test = 1;
console.log(test); // 1
test = 2;
console.log(test); // 2
LET
- Переменная объявляемая словом «let» объявляется в том месте кода где она была прописана:
console.log(key); // ReferenceError: Cannot access 'key' before initialization
let key = "Hello";
console.log(key); // "Hello"
- Переменную с таким же именем нельзя объявить повторно в блоке кода программы:
let key = "Hello";
console.log(key); // "Hello"
let key = "Buy";
console.log(key); // SyntaxError: Identifier 'key' has already been declared
- При этом в другом блоке можно объявить переменную с таким же именем:
let key = "Hello";
console.log(key); // "Hello"
function run() {
let key = "Buy";
console.log(key); // "Buy"
}
run();
- Переменная может быть обновлена:
let key = "Hello";
console.log(key); // "Hello"
key = "Buy";
console.log(key); // "Buy"
CONST
- Ключевое слово «const» имеет все те же преимущества, что и «let», но с одним исключением. Переменная объявленная через «const» не может быть изменена. При попытки изменения, нам выдаст ошибку:
const key = "Hello";
key = "Buy";
console.log(key); // TypeError: Assignment to constant variable.