Files
frontend-docs/docs/javascript/functions/03-func-expression.md
2025-02-27 15:52:06 +03:00

3.9 KiB
Raw Blame History

sidebar_position
sidebar_position
3

Function Expression

Function Declaration (Объявление Функции):

function sayHi() { 
  alert( "Привет" ); 
}

Function Expression (Функциональное Выражение).

let sayHi = function() { 
  alert( "Привет" ); 
};

Функция это значение

Давайте повторим: независимо от того, как создаётся функция она является значением. В обоих приведённых выше примерах функция хранится в переменной sayHi.

function sayHi() { 
  alert( "Привет" );
}

alert( sayHi ); // выведет код функции

Функции-«колбэки»

Ключевая идея в том, что мы передаём функцию и ожидаем, что она вызовется обратно (от англ. «call back» обратный вызов) когда-нибудь позже, если это будет необходимо.

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

  • Function Declaration: функция объявляется отдельной конструкцией «function…» в основном потоке кода.
  • Function Expression: функция, созданная внутри другого выражения или синтаксической конструкции. В данном случае функция создаётся в правой части «выражения присваивания» =

💥 Более тонкое отличие состоит в том, когда создаётся функция движком JavaScript.

Function Declaration может быть вызвана раньше, чем она объявлена.

sayHi("Вася"); // Привет, Вася

function sayHi(name) {
  alert( `Привет, ${name}` ); 
}

Function Expression создаётся, когда выполнение доходит до него, и затем уже может использоваться.

sayHi("Вася"); // ошибка!

let sayHi = function(name) { // (*) магии больше нет 
  alert( `Привет, ${name}` ); 
};

Ещё одна важная особенность Function Declaration заключается в их блочной области видимости.

В строгом режиме, когда Function Declaration находится в блоке {...}, функция доступна везде внутри блока. Но не снаружи него.

  • Функции это значения. Они могут быть присвоены, скопированы или объявлены в любом месте кода.
  • Если функция объявлена как отдельная инструкция в основном потоке кода, то это “Function Declaration”.
  • Если функция была создана как часть выражения, то это “Function Expression”.
  • Function Declaration обрабатываются перед выполнением блока кода. Они видны во всём блоке.
  • Функции, объявленные при помощи Function Expression, создаются только когда поток выполнения достигает их.

В большинстве случаев, когда нам нужно объявить функцию, Function Declaration предпочтительнее, т.к функция будет видна до своего объявления в коде. Это даёт нам больше гибкости в организации кода, и, как правило, делает его более читабельным.