Συνάρτηση που επιστρέφει συνάρτηση στο JavaScript

Ας υποθέσουμε ότι έχουμε μια συνάρτηση που επιστρέφει μια συμβολοσειρά:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // θα εμφανίσει '!'

Τώρα ας επιστρέψουμε, κατ' αναλογία, μια ανώνυμη συνάρτηση αντί για συμβολοσειρά:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

let result = func(); // η μεταβλητή result θα περιέχει μια συνάρτηση
console.log(result); // θα εμφανίσει 'function() {return '!';}'

Όπως βλέπετε, η μεταβλητή result τώρα αναπαριστά μια συνάρτηση. Ας εμφανίσουμε στην κονσόλα το αποτέλεσμα της εκτέλεσής της. Για αυτό γράφουμε παραθέσεις:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

let result = func();
console.log( result() ); // θα εμφανίσει '!'

Εφόσον η κλήση func() επιστρέφει μια συνάρτηση, μπορούμε αμέσως να καλέσουμε αυτήν την επιστρεφόμενη συνάρτηση, ως εξής: func()() - οι πρώτες παραθέσεις λαμβάνουν το αποτέλεσμα της συνάρτησης func (το οποίο είναι η ίδια μια συνάρτηση), ενώ οι δεύτερες παραθέσεις εφαρμόζονται στο αποτέλεσμα της func.

Ας δοκιμάσουμε:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

console.log( func()() ); // θα εμφανίσει '!'
Задание 1

Δημιουργήστε τη συνάρτηση func1, η οποία όταν καλείται ως εξής: func1()(), επιστρέφει τον αριθμό 1. Δημιουργήστε μια ανάλογη συνάρτηση func2, που επιστρέφει τον αριθμό 2. Βρείτε το άθροισμα των αποτελεσμάτων αυτών των συναρτήσεων.