Найти в Дзене
drylikov

Как это использовать: объявление функции и функциональные выражения.

Если вы создаёте функцию с названием, то вам необходимо объявить функцию. В функциональных выражениях же название не обязательно. function doStuff() {}; const doStuff = function() {} Анонимные функции (без названия) выглядят в ES6 вот таким образом: const doStuff = () => {} Поднятие функций подразумевает то, что мы можем использовать функции в коде до того, как в программе встретится сама функция. Они создаются во время компиляции программы и доступны внутри вашей программы вне зависимости от места объявления в коде. Рассмотрим пример: doStuff();
function doStuff() {}; Код выше запустится без ошибок, в отличии от того, что ниже: doStuff();
const doStuff = () => {}; Возможно, сейчас вам кажется, что объявление функций гораздо полезнее функциональных выражений, и вторые можно просто не использовать. На самом деле, выбор того или иного метода определяется областью необходимости функции. Задайте себе вопрос: что в вашем коде должно знать об этой функции? Функциональные выра
Оглавление

Первое отличие: название.

Если вы создаёте функцию с названием, то вам необходимо объявить функцию. В функциональных выражениях же название не обязательно.

Объявление функции:

function doStuff() {};

Функциональное выражение:

const doStuff = function() {}

Анонимные функции (без названия) выглядят в ES6 вот таким образом:

const doStuff = () => {}

Поднятие.

Поднятие функций подразумевает то, что мы можем использовать функции в коде до того, как в программе встретится сама функция. Они создаются во время компиляции программы и доступны внутри вашей программы вне зависимости от места объявления в коде.

Объявленные функции могут подниматься, в отличии от выражений.

Рассмотрим пример:

doStuff();

function doStuff() {};

Код выше запустится без ошибок, в отличии от того, что ниже:

doStuff();

const doStuff = () => {};

Когда использовать функциональные выражения?

Возможно, сейчас вам кажется, что объявление функций гораздо полезнее функциональных выражений, и вторые можно просто не использовать. На самом деле, выбор того или иного метода определяется областью необходимости функции. Задайте себе вопрос: что в вашем коде должно знать об этой функции?

Функциональные выражения нужны для того, чтобы не засорять глобальную область видимости. Программе не нужно запоминать большое количество функций, используемых единожды. Она забывает их, как только они становятся ненужными.

Самовызывающиеся функции (IIFE)

Название говорит само за себя. Если функция создаётся тогда же, когда и вызывается, то можно использовать самовызывающуюся функцию:

(function() => {})()

или:

(() => {})()

Обратный вызов.

Передача функции в качестве аргумента другой функции в JavaScript называется обратным вызовом. Например:

function mapAction(item) {
// do stuff to an item
}
array.map(mapAction)

Проблема в том, что функция mapAction будет видна во всём коде и будет занимать память, хотя понадобится она лишь один раз. Если же мы используем функциональное выражение, оно будет доступным только внутри функции map и займёт память стека функции.

array.map(item => { //do stuff to an item })

или:

const mapAction = function(item) {
// do stuff to an item
}
array.map(mapAction)

В последнем случае функция mapAction будет видимой только после её инициализации.

Заключение.

Объявлять функции следует тогда, когда вы хотите создать функцию в глобальной области видимости и сделать её доступной во всём коде. Если же необходимая область видимости функции ограничена, используйте функциональные выражения. Сохраняйте свой код чистым!

🙏 Спасибо за прочтение! 🙏

Надеюсь, эта статья была вам полезна. Если у вас есть вопросы или предложения, пожалуйста, оставляйте комментарии. Ваши отзывы помогают мне становиться лучше.

⚠️ Внимание! ⚠️

Если при чтении этой статьи вы обнаружите какие-либо ошибки в программном коде или грамматике, битые ссылки, пожалуйста, дайте мне знать. Заранее приношу извинения за возможные неудобства.