Κλειστά (closure) του ECMAScript
- Προηγούμενη σελίδα Αντικείμενο Function
- Επόμενη σελίδα Αντικειμενοστρεφής
Η πιο παραπλανητική πτυχή του ECMAScript είναι η υποστήριξη των κλειστών (closure).
Κλειστή συνάρτηση, αναφέρεται στη λέξιση που περιλαμβάνει τις μεταβλητές που δεν υπολογίζονται, δηλαδή, η συνάρτηση μπορεί να χρησιμοποιήσει μεταβλητές που ορίστηκαν εκτός της συνάρτησης.
Απλό παράδειγμα κλειστής συνάρτησης
Η χρήση των κοινών μεταβλητών στο ECMAScript είναι ένα απλό παράδειγμα κλειστής συνάρτησης. Πιστέψτε στο παρακάτω κώδικα:
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
Σε αυτό το κομμάτι κώδικα, ο κώδικας φορτώνεται στη μνήμη χωρίς να υπολογίσει την τιμή της μεταβλητής sMessage για τη συνάρτηση sayHelloWorld(). Η συνάρτηση sayHelloWorld() καταγράφει την τιμή της sMessage μόνο για μελλοντική χρήση, δηλαδή, η διαπραγματευτική μηχανή γνωρίζει ότι πρέπει να ελέγξει την τιμή της sMessage κατά την κλήση της συνάρτησης sayHelloWorld(). Η sMessage θα αποδοθεί κατά την κλήση της sayHelloWorld() (τελευταία γραμμή), και θα εμφανιστεί το μήνυμα "hello world".
Περίπλοκη περίπτωση κλειστής συνάρτησης
Η ορισμός μιας συνάρτησης μέσα σε μια συνάρτηση κάνει τις κλειστές συναρτήσεις πιο περίπλοκες. Για παράδειγμα:
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
Σε αυτό το σημείο, η συνάρτηση addNum() περιλαμβάνει τη συνάρτηση doAdd() (κλειστή συνάρτηση). Η εσωτερική συνάρτηση είναι μια κλειστή συνάρτηση, επειδή θα πάρει τις τιμές των παραμέτρων iNum1 και iNum2 της εξωτερικής συνάρτησης και την τιμή της κοινής μεταβλητής iBaseNum. Η τελευταία ενέργεια της addNum() είναι η κλήση της doAdd(), η οποία προσθέτει τους δύο παραμέτρους και την κοινή μεταβλητή και επιστρέφει την αθροιστική τους τιμή.
Η σημαντική ιδέα που πρέπει να καταννοηθεί εδώ είναι ότι η συνάρτηση doAdd() δεν δέχεται καθόλου παραμέτρους, η τιμή που χρησιμοποιεί είναι από το περιβάλλον εκτέλεσης.
Φαίνεται ότι οι κλειστές συναρτήσεις είναι ένα πολύ ισχυρό και ευρέως χρησιμοποιούμενο μέρος του ECMAScript, που μπορεί να χρησιμοποιηθεί για εκτελεστικές υπολογιστικές λειτουργίες.
Συμβουλή:Καθώς χρησιμοποιείτε οποιαδήποτε προηγμένη συνάρτηση, χρησιμοποιήστε με προσοχή τις κλειστές συναρτήσεις, επειδή μπορεί να γίνουν πολύπλοκες.
- Προηγούμενη σελίδα Αντικείμενο Function
- Επόμενη σελίδα Αντικειμενοστρεφής