В чем различия между ‘var’, ‘const’, ‘let’?

от | 30 Авг 2020 | JavaSctipr, Программирование

До прихода обновления 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.