Αποχρώσεις των Functional Expressions στην JavaScript
Το όνομα Function Expression δεν δόθηκε τυχαία. Πραγματικά σημαίνει αυτό - ότι τέτοιες συναρτήσεις είναι μέρος κάποιας έκφρασης.
Για παράδειγμα, μπορούμε να προσθέσουμε κάποια συμβολοσειρά και μια ανώνυμη συνάρτηση:
let str = 'str' + function() {return 3;};
console.log(str); // θα εμφανίσει 'strfunction() {return 3;}'
Γιατί βλέπουμε ένα τόσο παράξενο αποτέλεσμα,
και όχι τον αριθμό 3; Επειδή ο δεύτερος όρος
- δεν είναι το αποτέλεσμα της συνάρτησης, αλλά ο πηγαίος της
κώδικας (εφόσον δεν καλέσαμε αυτή τη συνάρτηση, απλά
την γράψαμε).
Δηλαδή το όνομα functional expression (συναρτησιακή έκφραση) δηλώνει ότι μια τέτοια συνάρτηση λαμβάνει μέρος σε κάποια έκφραση.
Η ανάθεση σε μια μεταβλητή είναι επίσης έκφραση:
let func = function() {
console.log('!');
};
Μπορούμε επίσης, για παράδειγμα, να περάσουμε τη συνάρτηση
ως παράμετρο στο console.log και αυτή θα εμφανίσει
τον πηγαίο κώδικά της στην κονσόλα - αυτό θα θεωρηθεί επίσης
έκφραση:
console.log(function() {return 3;});
Γιατί αυτό είναι σημαντικό: επειδή η διαφορά μεταξύ Function Declaration και Function Expression δεν είναι καθόλου στο ότι η πρώτη συνάρτηση δημιουργείται με όνομα, ενώ η δεύτερη αρχικά δεν έχει όνομα. Αυτό δεν είναι αλήθεια.
Παράδειγμα. Εδώ έχουμε μια συνάρτηση χωρίς όνομα, αλλά ταυτόχρονα δεν συμμετέχει σε καμία έκφραση (δηλαδή δεν εκτελούνται με αυτήν καμία ενέργεια, για να το πούμε απλά):
/*
Αυτή η συνάρτηση θα είναι Function Declaration,
αλλά με σφάλμα σύνταξης:
*/
function() {
console.log('!');
}
Ένας τέτοιος κώδικας θα δώσει γενικά σφάλμα! Γιατί: εφόσον η συνάρτηση δεν συμμετέχει σε καμία έκφραση, τότε το πρόγραμμα περιήγησης την θεωρεί Function Declaration, αλλά δεν βρίσκει το όνομά της και δίνει σφάλμα.
Για να εξαφανιστεί το σφάλμα, πρέπει να κάνουμε τη συνάρτηση
μέρος κάποιας έκφρασης. Για παράδειγμα,
γράφουμε πριν από αυτήν την πράξη +:
+function() { // ένας τέτοιος κώδικας είναι σωστός
console.log('!');
};
Πώς λειτουργεί αυτό: η ίδια η πράξη +
δεν κάνει τίποτα, είναι το ίδιο σαν να γράψουμε
αντί για τον αριθμό 3 τον αριθμό +3 - επιτρέπεται,
αλλά δεν αλλάζει τίποτα.
Αλλά στην περίπτωση της συνάρτησης - αλλάζει. Τώρα η συνάρτησή μας δεν είναι απλά γραμμένη, αλλά συμμετέχει σε μια έκφραση. Επομένως δεν θα υπάρξει πλέον σφάλμα. Ούτε θα υπάρξει αποτέλεσμα εκτέλεσης της συνάρτησης, εφόσον απλά τη γράψαμε, αλλά δεν την καλέσαμε.
Αντί για + μπορούμε να γράψουμε οτιδήποτε.
Για παράδειγμα:
-function() { // ένας τέτοιος κώδικας είναι σωστός
console.log('!');
};
!function() { // ένας τέτοιος κώδικας είναι σωστός
console.log('!');
};
Μπορούμε επίσης να βάλουμε τη συνάρτησή μας σε κυκλικές παρενθέσεις, σε αυτήν την περίπτωση θα γίνει επίσης συναρτησιακή έκφραση:
(function() { // ένας τέτοιος κώδικας είναι σωστός
console.log('!');
});
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
function func() {
console.log('!');
}
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
let func = function() {
console.log('!');
}
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
+function() {
console.log('!');
}
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
!function func() {
console.log('!');
}
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
-function func() {
console.log('!');
}
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
1 + function func() {
console.log('!');
}
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
(function func() {
console.log('!');
})
Προσδιορίστε εάν η παρουσιαζόμενη συνάρτηση είναι Function Declaration ή Function Expression:
console.log(
function() {
console.log('!');
}
);