Sobes.tech
Middle
111
questionbank

Каковы особенности работы с function expression и function declaration в JavaScript?

AI答案

sobes.tech AI

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() {
    // ...
  };
}