TL; DR: Нет, выражения функций не бесполезны.
Прежде всего, я бы извлек объявления функций из выражений функций, а не обратно. Объявления функций также полезны, но их можно полностью заменить выражениями функций.
Основное отличие: объявления функций всегда создают переменные, а выражения функций - нет. Тем не менее, вы все равно можете назначить их переменным.
Следующие коды идентичны (ОК, не полностью идентичны, они отличаются по своим правилам подъема):
function foo(bar){
return 'baz'
}
//Function declarations create variables like how `var` does
var foo = function foo(bar){
return 'baz'
}
Однако, выражения функций становятся удобными, когда вы не хотите сохранять функцию в var
iable.
Примеры включают:
Константа функции:
const foo = function foo(bar){
return 'baz'
}
Функции с областью действия блока:
{
let foo = function foo(bar){
return 'baz'
}
}
IIFEs (Сразу же вызвано Выражение функции с ):
(function (bar){
//Here we have an encapsulated local scope and the ability to return things
return 'baz'
})('foo')
Обратные вызовы:
asyncFn(function (){
console.log('Done!')
})
Хранение в объектах:
foo[2].bar = function (){
return 'baz'
}
Присвоение ранее объявленным переменным:
let foo = null
console.log(foo)
foo = function foo(bar){
return 'baz'
}
И, хотя технически все вышеперечисленное может быть решено только с помощью объявлений функций, это приведет к множеству ненужных переменных и трудно читаемый код.
Я точно не знаю, почему Code Academy предпочитает использовать выражения функций в y в нашем случае, но я думаю, что дело в ключевом слове const
, как оно есть:
- Блок-область
- Константа
- Ограничивает странные причуды, которые
var
(и объявления функций) позволят - Поднимается с временной мертвой зоной (доступ к ней невозможен до ее объявления)