JavaScript

Function Expression в сравнении с Function Declaration

Прочитал статью на learn.javascript.ru и вообще не понял когда применять Function Expression и зачем он нужен, если есть Function Declaration. Может кто доступным языком объяснить когда нужно применятьFunction Expression и как. Еще раз: ДОСТУПНЫМ языком обычного человека
Особо ничем не отличаются. Разве что Function Declaration можно объявить и до и после её вызова. Происходит это потому что JavaScript сперва проходит по всем Function Declaration и только тогда выполняет основной код.
Function Expression по сути функция сохраненная в переменную. Ты не можешь использовать переменную до того как её инициализируешь.

Можно:
 function returnText(){ 
return "text";
}

returnText();
Можно:
 returnText(); 

function returnText(){
return "text";
}
Можно:
 const returnText = function(){ 
return "text";
}

returnText();
Нельзя:
 returnText(); 

const returnText = function(){
return "text";
}

Судя по StackOverflow, это единственное отличие.

Я лично всегда использую Function Declaration. В альтернативе не вижу особого смысла.
Роман Бабурин
Роман Бабурин
23 960
Лучший ответ
Уже давно всегда можно стрелочные функции применять
РР
Ринат Рыстин
79 898
Разница:
  1. Function Declaration может быть объявлена и до, и после ее вызова, Function Expression нужно объявлять только до вызова.
  2. Function Declaration не доступен вне своей области видимости т.е. вне блока кода, ограниченного { }, поэтому когда нужно чтобы функция, например, была глобальной, но присвоить ее нужно где-то в другом месте, мы объявляем переменную глобально, а функцию присваиваем внутри условия/другой функции и т.д. и т.п. Получается Function Expression

На практике в 99% случаев – это вкусовщина, используйте, что вам нравится, НО иногда выбор синтаксиса действительно будет иметь значение.

Но, скорее всего, и вместо
 let sum = function(a, b) { 
return a + b;
};
и вместо
 function sum (a, b) {  
return a + b;
};
вы будете использовать стрелочные функции (когда дойдете до них, если еще не изучали)
 let sum = (a, b) => a + b; 
Вот они гораздо короче и удобнее, и у них тоже есть нюансы!! Думаю, когда их изучите – будете почти всегда применять именно стрелочные функции, везде, где это возможно. Но опять же – вкусовщина, если конечно не важен контекст.
Роман Бабурин Если вдаваться в подробности, то все анонимные и самовызывающиеся функции являются "функциональными выражениями". Что добавляет различий.
Я всегда пользуюсь "объявлением функции", но когда нужна анонимная или самовызывающаяся, то технически пользуюсь "функциональными выражениями".
По сути не горячо не холодно от того как они называются, главное уметь ими пользоваться. Если преподаватели это требуют запоминать такие вещи, то с системой образования явно что-то не так...
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/function