Κλεισίματα και Άμεση Κλήση Συναρτήσεων σε JavaScript
Όπως ήδη γνωρίζετε, είναι δυνατόν να καλέσετε μια ανώνυμη συνάρτηση αμέσως και να αντιστοιχίσετε το αποτέλεσμα μιας μεταβλητής:
let result = function() {
return '!';
}();
console.log(result); // θα εμφανίσει '!'
Συχνά, τη συνάρτηση που καλείται αμέσως, σε τέτοιες περιπτώσεις την περικλείουμε σε παρενθέσεις, αν και αυτό δεν είναι απαραίτητο. Αυτό γίνεται για να είναι αμέσως ορατό ότι η συνάρτηση καλείται αμέσως:
let result = (function() {
return '!';
})();
console.log(result); // θα εμφανίσει '!'
Ας κάνουμε τώρα το αποτέλεσμα της συνάρτησης που κλήθηκε αμέσως να είναι μια ανώνυμη συνάρτηση:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // θα εμφανίσει '!'
Ας κάνουμε έτσι ώστε η συνάρτηση που επιστρέφεται
να αποθηκεύει στη μεταβλητή num του κλεισίματος:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Εάν προσθέσετε και num++, τότε η συνάρτηση
func θα γίνει ένας έτοιμος μετρητής:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // θα εμφανίσει 1
func(); // θα εμφανίσει 2
func(); // θα εμφανίσει 3
func(); // θα εμφανίσει 4
func(); // θα εμφανίσει 5
Χωρίς να κοιτάξετε τον κώδικά μου, ανεξάρτητα υλοποιήστε έναν παρόμοιο μετρητή.
Τροποποιήστε τη λειτουργία του μετρητή έτσι ώστε
να μετράει μέχρι 5, και μετά η μέτρηση να ξεκινά
από την αρχή.