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ą. Zleticonstnie 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ęć.