Чем отличается объявление функции через стрелочную нотацию и function
В чем разница между объявлением функции через const name = () => {} и function?
Объявление стрелочной функции const name = () => {}
это присваивание некоторого выражения в константу. Выражением тут является анонимная функция () => {}
, и это накладывает теже ограничения, какие существуют для констант: нельзя переназначить константу и нельзя ее использовать до того, как она объявлена, а так же ограничивается зона видимости по всем правилам создания переменных через const, let, var
.
Объявление через function () {}
расширяет зону видимости функции и позволяет её использовать до создания функции. Например:
const hello = myFunc();
console.log(hello); // => hello
function myFunc() {
return 'hello';
}
Также у стрелочных функций нет своего контекста, они берут текущий контекст в момент своего создания. Подробнее об этом написано здесь.