Sobes.tech
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 var wordt gebruikt). De functie zelf is pas beschikbaar nadat de interpreter de regel met de definitie heeft bereikt. Met let en const is 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.