Sobes.tech
Junior

Que savez-vous des différences entre une expression de fonction (function expression) et une déclaration de fonction (function declaration) ?

sobes.tech IA

Réponse de l'IA

L’expression de la fonction peut être nommée ou anonyme. La déclaration de fonction a toujours un nom.

La principale différence réside dans le mécanisme de hoisting :

  • Déclaration de fonction : Elle est entièrement levée, y compris le corps. La fonction est accessible pour l’appel dans le code avant sa déclaration effective.
  • Expression de fonction : Seule la variable à laquelle elle est assignée est levée (si var est utilisé). La fonction elle-même n’est accessible qu’après que l’interpréteur ait atteint la ligne avec sa définition. Avec let et const, il n’y a pas de hoisting même pour la variable.
// Déclaration de fonction
console.log(declarationFunc()); // Fonctionne, la fonction est levée

function declarationFunc() {
  return "Je suis une déclaration";
}

// Expression de fonction
// console.log(expressionFunc()); // Provoquera une TypeError ou ReferenceError (dépend de var/let/const)

const expressionFunc = function() {
  return "Je suis une expression";
};

console.log(expressionFunc()); // Fonctionne après la définition

Les déclarations de fonctions sont préférées pour une utilisation courante, car leur ordre dans le code n’affecte pas la possibilité de les appeler. Les expressions de fonctions sont souvent utilisées pour :

  • Créer des fonctions anonymes (par exemple, comme arguments ou expressions de fonction immédiatement invoquées - IIFE).
  • Définir des fonctions conditionnellement.
  • Créer des fermetures.