Sobes.tech
Junior

Co wiesz o różnicach między wyrażeniem funkcji (function expression) a deklaracją funkcji (function declaration)?

sobes.tech AI

Odpowiedź od AI

Wyrażenie funkcji może być nazwane lub anonimowe. Deklaracja funkcji zawsze ma nazwę.

Główna różnica to mechanizm podnoszenia (hoisting):

  • Deklaracja funkcji: Jest w pełni podnoszona, w tym ciało. Funkcja jest dostępna do wywołania w kodzie przed jej faktycznym zadeklarowaniem.
  • Wyrażenie funkcji: Podnosi się tylko zmienna, której jest przypisana (jeśli używa się var). Sama funkcja jest dostępna dopiero po tym, jak interpreter osiągnie linię z jej definicją. Z let i const nie ma podnoszenia nawet dla zmiennej.
// Deklaracja funkcji
console.log(declarationFunc()); // Działa, funkcja została podniesiona

function declarationFunc() {
  return "Jestem deklaracją";
}

// Wyrażenie funkcji
// console.log(expressionFunc()); // Spowoduje TypeError lub ReferenceError (w zależności od var/let/const)

const expressionFunc = function() {
  return "Jestem wyrażeniem";
};

console.log(expressionFunc()); // Działa po definicji

Deklaracje funkcji są preferowane do zwykłego użytku, ponieważ ich kolejność w kodzie nie wpływa na możliwość wywołania. Wyrażenia funkcji często są używane do:

  • Tworzenia funkcji anonimowych (np. jako argumenty lub natychmiast wywoływane wyrażenia funkcji - IIFE).
  • Warunkowego definiowania funkcji.
  • Tworzenia zamknięć.