Κλεισίματα σε JavaScript
Ας μελετήσουμε τώρα την έννοια του κλεισίματος (closure). Στην πραγματικότητα, είστε ήδη εξοικειωμένοι με αυτήν την έννοια, το μόνο που απομένει είναι να μάθετε τη σωστή ορολογία.
Έτσι, ένα κλείσιμο είναι μια συνάρτηση μαζί με όλες τις εξωτερικές μεταβλητές που είναι προσβάσιμες σε αυτήν. Ή, με άλλα λόγια, ένα κλείσιμο είναι μια συνάρτηση μαζί με το λεξικό της περιβάλλον.
Στη JavaScript, τις περισσότερες φορές, όταν λέμε "κλείσιμο συνάρτησης", δεν εννοούμε την ίδια τη συνάρτηση, αλλά ακριβώς τις εξωτερικές της μεταβλητές. Εάν κάποια συνάρτηση λαμβάνει μια μεταβλητή από το λεξικό της περιβάλλον, τότε λέμε "η μεταβλητή λαμβάνεται από το κλείσιμο".
Ας θυμηθούμε τον κώδικα που δημιουργήσαμε στο προηγούμενο μάθημα:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // εμφανίζει 1
Σε αυτήν την περίπτωση, μπορούμε να πούμε ότι η συνάρτηση
func λαμβάνει την τιμή της μεταβλητής
num από το κλείσιμο. Επίσης, μπορούμε να πούμε
ότι η συνάρτηση func αποθηκεύει την τιμή της μεταβλητής
num στο κλείσιμο.