Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объявление функции (https://javascript.ru/forum/misc/60450-obyavlenie-funkcii.html)

Nazaki 30.12.2015 17:55

Объявление функции
 
Почему с expression работает?
if (f = function(){}){
    alert(f);
}

а с declaration - ReferenceError: w is not defined
if (function w(){}){
    alert(w);
}

callbackhell 30.12.2015 18:21

это связано с двухпроходной компиляцией. Видимо, изнури if declaration не компилируется при первом проходе. Вообще, function declaration таит в себе множество сюрпризов, лучше не использовать его вообще.

Decode 30.12.2015 20:14

Nazaki, во втором случае NFE, а не FD. И w доступна только внутри функции, поэтому и ошибка.

В первом случае все работает.

Nazaki 30.12.2015 23:32

А по какому признаку в рамках данной задачи отличить FD от NFE?
То, что конструкция обвёрнута в скобки? Как вы определяете?

Decode 31.12.2015 00:50

Nazaki, FD может располагаться в коде только в двух местах: в глобальном контексте или внутри другой функции, и обязательно должна быть записана в виде:
function имя() { ... }

Все остальное — FE, NFE (если есть имя).

Nazaki 31.12.2015 00:53

Всё, разобрался. FD не может быть объявлена в области "выражения". Скобками мы даём понять интерпретатору, что внутри выражения мы используем FE.

Nazaki 31.12.2015 00:53

Спасибо


Часовой пояс GMT +3, время: 03:16.