Συνάρτηση που επιστρέφει συνάρτηση στο JavaScript
Ας υποθέσουμε ότι έχουμε μια συνάρτηση που επιστρέφει μια συμβολοσειρά:
function func() {
return '!';
}
let result = func();
console.log(result); // θα εμφανίσει '!'
Τώρα ας επιστρέψουμε, κατ' αναλογία, μια ανώνυμη συνάρτηση αντί για συμβολοσειρά:
function func() {
return function() {
return '!';
};
}
let result = func(); // η μεταβλητή result θα περιέχει μια συνάρτηση
console.log(result); // θα εμφανίσει 'function() {return '!';}'
Όπως βλέπετε, η μεταβλητή result τώρα
αναπαριστά μια συνάρτηση. Ας εμφανίσουμε
στην κονσόλα το αποτέλεσμα της εκτέλεσής της. Για αυτό γράφουμε
παραθέσεις:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // θα εμφανίσει '!'
Εφόσον η κλήση func() επιστρέφει μια συνάρτηση,
μπορούμε αμέσως να καλέσουμε αυτήν την επιστρεφόμενη
συνάρτηση, ως εξής: func()() - οι πρώτες
παραθέσεις λαμβάνουν το αποτέλεσμα της συνάρτησης
func (το οποίο είναι η ίδια μια συνάρτηση),
ενώ οι δεύτερες παραθέσεις εφαρμόζονται στο αποτέλεσμα της
func.
Ας δοκιμάσουμε:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // θα εμφανίσει '!'
Δημιουργήστε τη συνάρτηση func1, η οποία όταν
καλείται ως εξής: func1()(), επιστρέφει
τον αριθμό 1. Δημιουργήστε μια ανάλογη συνάρτηση
func2, που επιστρέφει τον αριθμό 2.
Βρείτε το άθροισμα των αποτελεσμάτων αυτών των συναρτήσεων.