Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.12.2015, 17:55
Интересующийся
Отправить личное сообщение для Nazaki Посмотреть профиль Найти все сообщения от Nazaki
 
Регистрация: 23.12.2015
Сообщений: 16

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

а с declaration - ReferenceError: w is not defined
if (function w(){}){
    alert(w);
}
Ответить с цитированием
  #2 (permalink)  
Старый 30.12.2015, 18:21
Аспирант
Посмотреть профиль Найти все сообщения от callbackhell
 
Регистрация: 29.12.2015
Сообщений: 58

это связано с двухпроходной компиляцией. Видимо, изнури if declaration не компилируется при первом проходе. Вообще, function declaration таит в себе множество сюрпризов, лучше не использовать его вообще.
Ответить с цитированием
  #3 (permalink)  
Старый 30.12.2015, 20:14
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

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

В первом случае все работает.
Ответить с цитированием
  #4 (permalink)  
Старый 30.12.2015, 22:08
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,661

Nazaki, в обоих случаях expression
Ответить с цитированием
  #5 (permalink)  
Старый 30.12.2015, 23:32
Интересующийся
Отправить личное сообщение для Nazaki Посмотреть профиль Найти все сообщения от Nazaki
 
Регистрация: 23.12.2015
Сообщений: 16

А по какому признаку в рамках данной задачи отличить FD от NFE?
То, что конструкция обвёрнута в скобки? Как вы определяете?
Ответить с цитированием
  #6 (permalink)  
Старый 31.12.2015, 00:50
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

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

Все остальное — FE, NFE (если есть имя).
Ответить с цитированием
  #7 (permalink)  
Старый 31.12.2015, 00:53
Интересующийся
Отправить личное сообщение для Nazaki Посмотреть профиль Найти все сообщения от Nazaki
 
Регистрация: 23.12.2015
Сообщений: 16

Всё, разобрался. FD не может быть объявлена в области "выражения". Скобками мы даём понять интерпретатору, что внутри выражения мы используем FE.
Ответить с цитированием
  #8 (permalink)  
Старый 31.12.2015, 00:53
Интересующийся
Отправить личное сообщение для Nazaki Посмотреть профиль Найти все сообщения от Nazaki
 
Регистрация: 23.12.2015
Сообщений: 16

Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение прототипа функции tsigel Общие вопросы Javascript 11 15.05.2014 01:03
Добавление функции внутрь другой функции Lion_astana jQuery 9 28.12.2013 14:33
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
динамическое содержимое функции alfmaster Общие вопросы Javascript 2 28.05.2011 17:10
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21