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).