Почему код работает без ошибок, хотя переменной а присвоено значение без ключевого слова let

Дан код:

a = 1;
console.log(a); 
{
  var a = 10;
}
console.log(a);

И вопрос к нему:

Почему код работает без ошибок, хотя переменной а присвоено значение без ключевого слова let

Он работает потому, что var не имеет ограничений в области видимости и задает переменную a в начале кода вместо let? Или потому, что не использован режим use strict, а до него была возможность присваивания переменной значения без ее объявления?

Спасибо вам за ответ!


Ответы (2 шт):

Автор решения: ksa

Для var не существует блочной области видимости

Область видимости переменных var ограничивается либо функцией, либо, если переменная глобальная, то скриптом. Такие переменные доступны за пределами блока.

Более подробно можно посмотреть в учебнике https://learn.javascript.ru/var

→ Ссылка
Автор решения: Pacemaker

Потому что происходит хойстинг var. Переменная, объявленная через var всплывает на верх кода. Поэтому интерпретатор js думает, что a уже есть и выполняется первый console.log, а потом выполняется второй. Поэтому var устарел и ему на смену пришли let и const, чтобы избегать всплытий. Использование var усложняет чтение и понимание кода, а также сложность отыскивания багов, если код на несколько десятков или сотен строчек. Лови этот var, где он там объявлен и почему он всплыл :)

→ Ссылка