Sobes.tech
Middle

Quelles sont les particularités du travail avec les expressions de fonction et les déclarations de fonction en JavaScript?

sobes.tech IA

Réponse de l'IA

Function declaration (объявление функции) поднимается интерпретатором (hoisting), то есть может быть вызвана до своего определения в коде. Создается в момент парсинга скрипта. Имеет имя.

// functionDeclaration(); // Вызов до определения возможен

function functionDeclaration() {
  // Код функции
}

Function expression (функциональное выражение) не поднимается. Выполняется как часть выражения. Может быть анонимным или иметь имя (именованное функциональное выражение). Именованное Functional expression позволяет обращаться к функции рекурсивно внутри нее самой и видеть имя в отладчике.

// functionExpression(); // Вызов до определения вызовет ошибку

const functionExpression = function() {
  // Код функции
};

// Именованное функциональное выражение
const namedFunctionExpression = function myFunctionName() {
  // Код функции
  // Можно вызвать myFunctionName() внутри этой функции
};

Основные отличия:

Особенность Function Declaration Function Expression
Hoisting Да Нет
Время создания При парсинге скрипта В момент выполнения
Наличие имени Обязательно Может быть опционально
Использование в условиях Не рекомендуется Рекомендуется

Пример использования в условиях:

// Не рекомендуется для Function Declaration
if (condition) {
  function doSomething() {
    // ...
  }
}

// Предпочтительнее для Function Expression
let doSomething;
if (condition) {
  doSomething = function() {
    // ...
  };
}