Sobes.tech
Junior

Ko jūs zināt par atšķirībām starp funkcijas izteiksmi (function expression) un funkcijas deklarāciju (function declaration)?

sobes.tech AI

Atbilde no AI

Funkcijas izteiksme var būt ar nosaukumu vai bez nosaukuma. Funkcijas deklarācija vienmēr ir ar nosaukumu.

Galvenā atšķirība ir hoisting mehānismā:

  • Funkcijas deklarācija: Tā tiek pilnībā pacelta, ieskaitot ķermeni. Funkcija ir pieejama izsaukšanai kodā pirms tās faktiskās deklarācijas.
  • Funkcijas izteiksme: Tiek pacelta tikai mainīgā, kam tā ir piešķirta (ja tiek izmantots var). Paša funkcija ir pieejama tikai pēc tam, kad interpretētājs sasniedz tās definīcijas rindu. Ar let un const nav pacelšanas pat mainīgajam.
// Funkcijas deklarācija
console.log(declarationFunc()); // Darbojas, funkcija ir pacelta

function declarationFunc() {
  return "Es esmu deklarācija";
}

// Funkcijas izteiksme
// console.log(expressionFunc()); // Izraisīs TypeError vai ReferenceError (atkarībā no var/let/const)

const expressionFunc = function() {
  return "Es esmu izteiksme";
};

console.log(expressionFunc()); // Darbojas pēc definīcijas

Funkcijas deklarācijas ir vēlams izmantot ikdienas lietošanai, jo to kārtojums kodā neietekmē to izsaukšanas iespēju. Funkcijas izteiksmes bieži tiek izmantotas:

  • Anonīmu funkciju radīšanai (piem., kā argumentus vai tūlītēji izsauktas funkcijas izteiksmes - IIFE).
  • Nosacījuma funkciju definēšanai.
  • Aizvērumu (closures) radīšanai.