Комментарии 23
Основной смысл записи var f = function myFunc(){ } заключается в нормальных именах в стеке вызовов при отладке.
+1
Что в ES6 уже не имело смысла из-за автоматического вывода имен анонимных функций из переменных и контекста объявления.
0
К сожалению, свойство
name
у анонимных функций все еще не выводится из имени переменной, только из явного объявления имени функции. Мелочь, конечно, но иногда все же неудобно.0
Свойство name — нет, правда ваша. В стек-трейсах же все отображается наглядно — github.com/v8/v8/blob/master/test/cctest/test-func-name-inference.cc
0
Да ладно? :) 12.14.4 -> 1 -> e -> ii
0
Ещё именованные функции распространяются на весь код сразу, а безымянные только на тот, который идёт после объявления этой функции. Тоже вполне важное отличие, но не столь существенное, согласен.
0
Это для удобства рекурсивного вызова. По имени функция доступна внутри себя. Правда, в ИЕ8 есть проблемы — имя оказывается доступно извне.
+2
После прочтения статьи возникло несколько вопросов и комментариев:
- чем B отличается от C?
- почему E с G записали в объявления функций, если E — вызов, а G — объект?
- если B и D — разные, то чего уж там, давайте перечислять
function foo() {}
,function bar() {}
,function buzz() {}
как разные формы объявления функции. Почему нет? - почему в примерах присваивания
a
включает результат выполнения функции, аb
иc
— саму функцию? - Почему «оператор группировки» упоминается отдельно, если он не имеет никакого отношения к объявлению IIFE вообще?
- чем примеры ваших операторов, включая запятую, отличаются от того, чтобы заменить IIFE на сразу результат? Где разница между
void function...
иvoid 42
?
+2
А, ну и лямбды, которые
() => 1
, забыли?0
1. Наличием оператора группировки. Функционально они идентичны.
2. G сделан как дополнительный пример использования ключевого слова
3. Они разные в том плане что имени может и не быть. Важно было показать что возможен и такой вариант тоже.
4. Это же примеры, хотелось показать оба варианта. В данном случае не очень принципиально наличие вызова функции.
5. Почему не имеет?
6. Примеры выбраны тривиальными чтобы не нагружать статью лишним кодом. А так да, если бы этот код был в реальном проекте, то ваши замечания очень даже по делу.
2. G сделан как дополнительный пример использования ключевого слова
function
3. Они разные в том плане что имени может и не быть. Важно было показать что возможен и такой вариант тоже.
4. Это же примеры, хотелось показать оба варианта. В данном случае не очень принципиально наличие вызова функции.
5. Почему не имеет?
6. Примеры выбраны тривиальными чтобы не нагружать статью лишним кодом. А так да, если бы этот код был в реальном проекте, то ваши замечания очень даже по делу.
-1
Принципиальной разницы между вторым и третим вариантом нет
вы в жизни тоже от нуля считаете?
+1
Недавно пошло дикое поветрие всегда объявлять функции через
var a = function () {}
. Спрашиваешь зачем — мнутся что-то про хойстинг, но никто внятного ответа не дал, зачем в данном конкретном случае хойстинга надо избежать.0
Интересно, где вы это нашли такое. Все мои знакомые спокойно юзают function declaration.
Лично у меня сейчас ко всплытию только одна претензия — из-за него нельзя сделать нормальные декораторы для функций.
Лично у меня сейчас ко всплытию только одна претензия — из-за него нельзя сделать нормальные декораторы для функций.
+1
На работе и еще в паре мест, неважно.
Я сегодня отчаянно не выспался — подскажите, почему хойстинг мешает декораторам?
Я сегодня отчаянно не выспался — подскажите, почему хойстинг мешает декораторам?
0
Вот свежий пример: habrahabr.ru/post/274887/#comment_8734559
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Функциональные выражения в JavaScript