En definisjon er en navngitt funksjonserklæring; et uttrykk tilordner en funksjon til en variabel. Den praktiske forskjellen er hoisting.
js
// Declaration — fully hoisted, callable before its line
declared(); // ✅ works
function declared() { return "hi"; }
// Expression — only the variable binding is hoisted, not the function
expressed(); // ❌ TypeError: expressed is not a function
var expressed = function () { return "hi"; };
Hvorfor forskjellen
Funksjonsdefinisjonene hoistet med kroppen sin, så hele funksjonen finnes før utføringen når den. Et funksjonsuttrykk er bare en verdi som tilordnes en variabel — på det punkt med det tidlige kallet, expressed er fortsatt undefined (med var) eller i TDZ (med let/const).
Når du skal bruke hvilken
js
// expression — for callbacks, conditional definitions, arrow functions
const handler = () => doThing();
const fn = condition ? a : b;
arr.map(x => x * 2);
// declaration — clear, hoisted top-level functions
function calculateTotal(items) { ... }
Definisjonene leses godt for toppnivå-navngitte funksjoner og drar nytte av hoisting (du kan definere dem etter bruken deres). Uttrykkene er nødvendige for pil-funksjoner, tilbakekall, IIFE-er, og betinget tilordning av funksjoner. Pil-funksjoner er alltid uttrykk.
