Sobes.tech
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. let ja const puhul 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.