По области видимости function declaration
Приветствую.
Хотел уточнить, как точно определяется доступность функций, объявленных просто как function имя(){} вот, в примере:
function try1(){
//hoisted(); //ошибка (1)
{
//hoisted(); // выводит "foo" (2)
function hoisted() {
console.log("foo");
}
}
hoisted(); // выводит "foo" (3)
}
try1();
- поднятие функции получается доступно в блоке кода (2) - но при этом сама функция доступна и за пределами этого блока (после него) (3) - а "до" (1) нельзя Может где есть описание, как точно такое определение делается. Так само и с условным определением функций, то что я раньше выписывал себе из документации, смотрю не так сейчас работает |
Гугли в сторону "Временная мёртвая зона" ES6.
|
Нет, к TDZ это отношения не имеет.
Это FiB (так иногда обозначается - Function in Вlock). Это отдельная тема, которая описана в приложении к спецификации. https://262.ecma-international.org/9...lity-semantics Там, в частности, говорится, что до ES2015 это вообще никак не регламентировалось, и реализации в разных браузерах могли по-разному рассматривать этот случай. |
Rise, а в указанных вами статьях не говорится как строгий режим касается моей ситуации.
Так определять функции как в примере я и не собирался, но мало ли, встречу где..., постоянно ведь с чужим кодом |
Цитата:
Там говорится Цитата:
Цитата:
В какой области видимости объявлена функция hoisted? Если в области блока, то она поднимается в начало блока и работает случай (2). А почему тогда работает (3)? Если она в области функции try1, почему не работает (1)? |
Вот тут есть отрывок и с книги
Симпсон К {Вы пока еще не знаете JS} Область видимости и замыкания. https://habr.com/ru/company/piter/blog/587888/ Где все объяснено предельно просто Цитата:
|
Цитата:
Но все равно не все четко. Вот в доках, сказано что
Вызовет ошибку.
Объявление функций в блоках if (a < b) { function f() {} }
, а (2) работает и со строгим режимом |
По моему все очевидно.
Мне совсем не понятно с чем остались вопросы? |
Ясно, спасибо.
|
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 22:52. |