Junior
Mida sa tead funktsiooni väljenduse (function expression) ja funktsiooni deklaratsiooni (function declaration) erinevustest?
sobes.tech AI
Vastus AI-lt
Funktsiooni avaldis võib olla nimetatud või anonüümne. Funktsiooni deklaratsioonil on alati nimi.
Peamine erinevus on hoisting-mehhanismis:
- Funktsiooni deklaratsioon: See tõstetakse täielikult, kaasa arvatud keha. Funktsioon on kättesaadav kutsumiseks koodis enne selle tegelikku deklaratsiooni.
- Funktsiooni avaldis: Tõstetakse ainult muutuja, millele see on määratud (kui kasutatakse
var). Isegi funktsioon on kättesaadav alles pärast seda, kui interpreter jõuab selle definitsiooni reale.letjaconstpuhul puudub tõstmine isegi muutuja jaoks.
// Funktsiooni deklaratsioon
console.log(declarationFunc()); // Töötab, funktsioon on tõstetud
function declarationFunc() {
return "Ma olen deklaratsioon";
}
// Funktsiooni avaldis
// console.log(expressionFunc()); // Tekitab TypeError või ReferenceError (sõltuvalt var/let/const)
const expressionFunc = function() {
return "Ma olen avaldis";
};
console.log(expressionFunc()); // Töötab pärast määramist
Funktsiooni deklaratsioone eelistatakse tavapärases kasutuses, kuna nende järjekord koodis ei mõjuta nende kutsumise võimalust. Funktsiooni avaldisi kasutatakse sageli:
- Anonüümsete funktsioonide loomisel (nt argumentidena või kohe kutsutavate funktsioonide avaldised - IIFE).
- Tingimuslike funktsioonide määratlemiseks.
- Sulgude (closures) loomisel.