Σε JavaScript και τις περισσότερες άλλες γλώσσες προγραμματισμού , οι τοπικές μεταβλητές μιας συνάρτησης καταστράφηκε μετά το τέλος της λειτουργίας . Ωστόσο , όταν δημιουργείτε μια συνάρτηση μέσα σε μια άλλη λειτουργία σε JavaScript , οι τοπικές μεταβλητές της εξωτερικής λειτουργίας διατηρείται ακόμη και μετά τερματίζει επειδή οι μεταβλητές μπορεί να αναφέρεται από την εσωτερική λειτουργία . Το παράδειγμα που ακολουθεί περιέχει μια συνάρτηση " prizewinner " που δημιουργεί ένα κλείσιμο μέσα από ένα ανώνυμο λειτουργία, η οποία επιστρέφει . Καλούμε ότι η ανώνυμη λειτουργία απευθείας από το εξωτερικό , χωρίς καν να περάσει από τη μητρική λειτουργίας :
prizewinner λειτουργία ( όνομα ) { var νικητής = " Μπορείτε να κερδίσει το βραβείο , " + name ? Var ανακοινώσει = λειτουργία ( ) { alert ( νικητής ) ? } ? εάν ( η math.floor ( Math.random ( ) * 11 ) == 7 ) επιστρέφουν ανακοινώσει ? null επιστροφή? }
εάν ( var sayIt = Πρώτο βραβείο ( " Steve " ) ) sayIt ( ) ?
εικόνων Περνώντας παραμέτρους σε χειριστές συμβάντος
Η
Μία χρήση του κλεισίματος είναι να μεταβλητών σε χειριστές συμβάντων . Εξετάστε το ακόλουθο παράδειγμα στο οποίο ένα κλείσιμο που έχει δημιουργηθεί από μια ανώνυμη συνάρτηση που ορίζεται στο " setHandler . " Η ανώνυμη συνάρτηση παραπέμπει σε μια παράμετρο της « setHandler . " Στο σημείο οι πυρκαγιές περίπτωση, ακόμη κι αν « setHandler " έχει τελειώσει , οι τιμές των μεταβλητών της , συμπεριλαμβανομένων των παραμέτρων της , στο συμπέρασμα της συνάρτησης διατηρείται για την ανώνυμη συνάρτηση . Ένα ξεχωριστό κλεισίματος δημιουργείται για κάθε επανάληψη του βρόχου .
SetHandler λειτουργία ( πόρτα , βραβείο) { door.addEventListener ( "κλικ " , λειτουργία () { alert (" βραβείο για την πόρτα " + πόρτα + " είναι " + βραβείο) ? } , false) ? }
window.onload = λειτουργία ( ) { για ( var i = 1 ? i <= 3 ? i + + ) { setHandler ( document.getElementById ( " πόρτα " + i ) , το βραβείο [ i ] ) ? } }
Η Περνώντας παραμέτρους σε AJAX επανάκλησης Λειτουργίες
Η
παρόμοια με το προηγούμενο παράδειγμα , μπορούμε να περάσουμε παραμέτρους για AJAX λειτουργίες επανάκλησης με πώματα . Αν κάνετε μια κλήση AJAX στην οποία η μεταβλητή αίτημα είναι παγκόσμια , έχετε εξαλειφθεί η πιθανότητα να περάσει μια παράμετρο στη λειτουργία επανάκλησης , επειδή ένα ενιαίο παγκόσμιο αίτημα δημιουργείται . Κάνοντας το αίτημα μεταβλητή τοπικό , μπορείτε να δημιουργήσετε ένα κλείσιμο και να δώσει την λειτουργία επανάκλησης πρόσβαση στα δεδομένα αίτημα - ειδική . Στο παρακάτω παράδειγμα , δημιουργούμε ένα κλείσιμο καθορίζοντας τη λειτουργία επανάκλησης που χρησιμοποιεί μια μεταβλητή σε τοπικό επίπεδο, τη μητρική της λειτουργία . Ένα ξεχωριστό επανάκλησης δημιουργείται για κάθε ένα από τα 10 " makeRequest " κλήσεις
διαδικασίας λειτουργία () { για . ( Var i = 0 ? I <10 ? I + + ) { makeRequest ( i ) ? }
λειτουργία makeRequest ( που ) { var αίτημα ? useThis var = αναζήτηση ( η οποία ) ? αν ( window.XMLHttpRequest ) { = νέα αίτηση XMLHttpRequest ( ) ? } else if ( window.ActiveXObject ) { αίτημα = νέα ActiveXObject ( " Microisoft.XMLHTTP " ) ? } request.onreadystatechange = λειτουργία ( ) { μεταγλώττιση ( useThis ) ? } request.open ( " GET " , url ) ? request.send ( ) ? }
εικόνων Private μεταβλητές και Μέθοδοι JavaScript
Η
στο JavaScript , όλα τα μέλη ενός αντικειμένου είναι κοινό, σε αντίθεση με κάποιες άλλες αντικειμενοστραφείς γλώσσες που επιτρέπουν την ιδιωτική μεταβλητές και μεθόδους . Κλεισίματα σας επιτρέπουν να μιμηθούν ιδιωτικές μεθόδους και τις μεταβλητές στις JavaScript . Στο παρακάτω παράδειγμα , οι αντικείμενο «μυστικά» δημιουργείται και εκτελείται κατά τον ορισμό . Όταν εκτελείται, περιέχει ένα ανώνυμο αντικείμενο με δύο μεθόδους : " show " και " super ", το οποίο παίρνει μια παράμετρο . Τόσο η μεταβλητή " secretCode " και η λειτουργία " superSecret " μπορεί να προσεγγιστεί μόνο μέσα από τις δύο μεθόδους στην ενότητα " μυστικά " αντικείμενο . Στην πραγματικότητα , πρόκειται για ιδιώτες μέλη της
μυστικά var = λειτουργία () { var secretCode = ( ( ( 1 + Math.random ( ) ) * 0x100000 )
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα