Sobes.tech
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ę. Su let ir const nė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).