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).