26.01.2022, 20:47
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,743
|
|
Вот тут есть отрывок и с книги
Симпсон К
{Вы пока еще не знаете JS} Область видимости и замыкания.
https://habr.com/ru/company/piter/blog/587888/
Где все объяснено предельно просто
Цитата:
|
Спецификация JS гласит, что объявления функций внутри блоков имеют блоковую область видимости, .... Однако большинство браузерных ядер JS (включая движок v8, который происходит от Chrome, но также используется в Node) ведет себя в соответствии с пунктом (2); это означает, что идентификатор имеет область видимости вне блока if, но значение-функция не инициализируется автоматически, поэтому оно остается равным undefined.
Почему браузерным движкам JS разрешается нарушать своим поведением спецификацию? Потому что эти движки уже обладали поведением, связанным с FiB, до появления блоковой видимости в ES6, и существовали опасения, что изменения, направленные на соответствие спецификации, могут нарушить работоспособность существующего кода JS веб-сайтов. Из-за этого в приложении B спецификации JS было сделано исключение, позволяющее некоторые отклонения для браузерных движков JS (и только!).
|
Потому, что так сделано!
|