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