Sobes.tech
Junior

Τι γνωρίζετε για τις διαφορές μεταξύ έκφρασης συνάρτησης (function expression) και δήλωσης συνάρτησης (function declaration);

sobes.tech AI

Απάντηση από AI

Η έκφραση λειτουργίας μπορεί να είναι ονομασμένη ή ανώνυμη. Η δήλωση λειτουργίας έχει πάντα όνομα.

Η κύρια διαφορά είναι ο μηχανισμός ανύψωσης (hoisting):

  • Δήλωση λειτουργίας: Ανυψώνεται πλήρως, συμπεριλαμβανομένου του σώματος. Η λειτουργία είναι διαθέσιμη για κλήση στον κώδικα πριν από την πραγματική δήλωσή της.
  • Έκφραση λειτουργίας: Ανυψώνεται μόνο η μεταβλητή στην οποία της αποδίδεται (αν χρησιμοποιείται var). Η ίδια η λειτουργία είναι διαθέσιμη μόνο αφού ο διερμηνέας φτάσει στη γραμμή με τον ορισμό της. Με let και const δεν υπάρχει ανύψωση ακόμη και για τη μεταβλητή.
// Δήλωση λειτουργίας
console.log(declarationFunc()); // Λειτουργεί, η λειτουργία ανυψώθηκε

function declarationFunc() {
  return "Είμαι δήλωση";
}

// Έκφραση λειτουργίας
// console.log(expressionFunc()); // Θα προκαλέσει TypeError ή ReferenceError (ανάλογα με var/let/const)

const expressionFunc = function() {
  return "Είμαι έκφραση";
};

console.log(expressionFunc()); // Λειτουργεί μετά τον ορισμό

Οι δηλώσεις λειτουργίας προτιμώνται για γενική χρήση, καθώς η σειρά τους στον κώδικα δεν επηρεάζει τη δυνατότητα κλήσης τους. Οι εκφράσεις λειτουργίας χρησιμοποιούνται συχνά για:

  • Δημιουργία ανώνυμων λειτουργιών (π.χ., ως επιχειρήματα ή άμεσα καλούμενες εκφράσεις λειτουργίας - IIFE).
  • Συνθήκη ορισμού λειτουργιών.
  • Δημιουργία κλεισιμάτων (closures).