Junior
Wat weet je over de verschillen tussen een function expression en een function declaration?
sobes.tech AI
Antwoord van AI
De functiebepaling kan zowel genummerd als anoniem zijn. Functiedefinities hebben altijd een naam.
Het belangrijkste verschil is het hoisting-mechanisme:
- Functiedefinitie: Wordt volledig opgetild, inclusief de body. De functie is beschikbaar om opgeroepen te worden in de code voordat de daadwerkelijke definitie.
- Functie-uitdrukking: Alleen de variabele waaraan het wordt toegewezen wordt opgetild (als
varwordt gebruikt). De functie zelf is pas beschikbaar nadat de interpreter de regel met de definitie heeft bereikt. Metletenconstis er geen hoisting, zelfs niet voor de variabele.
// Functiedefinitie
console.log(declarationFunc()); // Werkt, de functie is opgetild
function declarationFunc() {
return "Ik ben een declaratie";
}
// Functie-uitdrukking
// console.log(expressionFunc()); // Geeft TypeError of ReferenceError (afhankelijk van var/let/const)
const expressionFunc = function() {
return "Ik ben een uitdrukking";
};
console.log(expressionFunc()); // Werkt na de definitie
Functiedefinities worden de voorkeur gegeven voor algemeen gebruik, omdat hun volgorde in de code niet van invloed is op de mogelijkheid om ze aan te roepen. Functie-uitdrukkingen worden vaak gebruikt voor:
- Het maken van anonieme functies (bijvoorbeeld als argumenten of direct aangeroepen function expressions - IIFE).
- Conditieafhankelijke definitie van functies.
- Het maken van closures.