Sobes.tech
Junior

Какво знаете за разликите между израза на функция (function expression) и декларацията на функция (function declaration)?

sobes.tech AI

Отговор от AI

Изразът на функция може да бъде с име или анонимен. Декларацията на функция винаги има име.

Основната разлика е механизмът на издигане (hoisting):

  • Декларация на функция: Тя се издига напълно, включително тялото. Функцията е достъпна за извикване в кода преди реалната ѝ декларация.
  • Израз на функция: Само променливата, на която ѝ е присвоена, се издига (ако се използва var). Самата функция е достъпна само след като интерпретаторът достигне реда с нейното определение. С let и const няма издигане дори за променливата.
// Декларация на функция
console.log(declarationFunc()); // Работи, функцията е издигната

function declarationFunc() {
  return "Аз съм декларация";
}

// Израз на функция
// console.log(expressionFunc()); // Ще предизвика TypeError или ReferenceError (зависи от var/let/const)

const expressionFunc = function() {
  return "Аз съм израз";
};

console.log(expressionFunc()); // Работи след дефиницията

Декларациите на функции са предпочитани за обикновена употреба, тъй като редът им в кода не влияе на възможността за извикване. Изразите на функции често се използват за:

  • Създаване на анонимни функции (например като аргументи или веднага извикани функции - IIFE).
  • Условно определяне на функции.
  • Създаване на затваряния (closures).