Junior
Ką žinote apie skirtumus tarp funkcijos išraiškos (function expression) ir funkcijos deklaracijos (function declaration)?
sobes.tech AI
Atsakymas iš AI
Funkcijos išraiška gali būti pavadinta arba anonimė. Funkcijos deklaracija visada turi pavadinimą.
Pagrindinis skirtumas yra hoisting mechanizme:
- Funkcijos deklaracija: Ji visiškai pakeliama, įskaitant kūną. Funkcija yra prieinama iškviesti ją kode prieš faktinį deklaravimą.
- Funkcijos išraiška: Pakeliama tik kintamoji, kuriai ji priskirta (jei naudojamas
var). Pačia funkcija galima naudotis tik po to, kai interpretatorius pasiekia jos apibrėžimo eilutę. Suletirconstnėra pakėlimo net ir kintamajam.
// Funkcijos deklaracija
console.log(declarationFunc()); // Veikia, funkcija pakelta
function declarationFunc() {
return "Aš esu deklaracija";
}
// Funkcijos išraiška
// console.log(expressionFunc()); // Sukels TypeError arba ReferenceError (priklauso nuo var/let/const)
const expressionFunc = function() {
return "Aš esu išraiška";
};
console.log(expressionFunc()); // Veikia po apibrėžimo
Funkcijos deklaracijos yra pageidautinos įprastam naudojimui, nes jų tvarka kode neturi įtakos jų iškvietimo galimybei. Funkcijos išraiškos dažnai naudojamos:
- Sukurti anonimines funkcijas (pvz., kaip argumentus arba iš karto iškviečiamos funkcijų išraiškos - IIFE).
- Sąlyginiu funkcijų apibrėžimu.
- Sukurti uždarymus (closures).