Οι ιδέες για τη δημιουργία δυναμικού περιεχομένου σε έναν πόρο ιστού έχουν γίνει ο κανόνας. Οι στατικές σελίδες και η δημιουργία ιστοτόπων προτύπων ολοκλήρωσαν επιτέλους την αποστολή τους.
Ωστόσο, ένας σύγχρονος πόρος ιστού δεν χρειάζεται να είναι ένα σύνολο σελίδων που δημιουργούνται από το διακομιστή και να ενημερώνονται από το πρόγραμμα περιήγησης (JS + AJAX).
Όταν φτάνει ένας επισκέπτης, ένας πόρος ιστού μπορεί να είναι μερικές κεφαλίδες για το πρωτόκολλο, κάποιο κείμενο στο "κεφάλι", μερικές γραμμές κώδικα στο "σώμα" και αυτό είναι. Το υπόλοιπο "σκέφτομαι»Κατά τη διαδικασία της εργασίας ενός επισκέπτη - αυτός είναι ένας ιδανικός ιστότοπος ή φιλοδοξεί να είναι ένας.
Το JavaScript είναι εμπειρία που αποκτήθηκε για πολλές δεκαετίες.Έχει μια σημαντική ιστορία ανάπτυξης, μια μοντέρνα ομάδα δημιουργών και προγραμματιστών. Η γλώσσα είναι καλά μελετημένη, αξιόπιστη, όμορφη και παρέχει μια πραγματική ευκαιρία στους προγραμματιστές να γράψουν αξιοπρεπή κώδικα και να βελτιωθούν.
Η έννοια ενός αλγορίθμου εκτός μιας συνάρτησης απουσιάζει εδώαρχή. Φυσικά, ο προγραμματιστής μπορεί να εισαγάγει ένα σενάριο οπουδήποτε στη σελίδα, να τοποθετήσει τον κωδικό σε αυτό και θα εκτελεστεί. Αλλά ποιο είναι το νόημα στον κώδικα που εκτελείται μόνο μία φορά: κατά τη φόρτωση (υπερφόρτωση) σελίδες; Εκτός αν κάποιος μπορεί να ορίσει τις αρχικές τιμές ορισμένων ασήμαντων μεταβλητών.
Ένα σενάριο είναι ένα μέρος για να περιγράψει τις απαιτούμενες μεταβλητές καιλειτουργεί παρά ένα ωραίο κομμάτι κώδικα γραμμένο για δικό του χάρη. Είναι το σύνολο των λειτουργιών που είναι απαραίτητο και σημαντικό, ίσως - η αμοιβαία άμεση σύνδεσή τους, αλλά συχνότερα τα πάντα είναι διαφορετικά. Ο τόπος όπου περιγράφεται η συνάρτηση και ο τόπος όπου εφαρμόζεται δεν είναι το ίδιο πράγμα.
Δεν είναι καθόλου απαραίτητο να είναι η λειτουργίακαλέστε μια άλλη λειτουργία απευθείας, μπορεί να γίνει έμμεσα μέσω δυναμικής δημιουργίας κώδικα. Ο επισκέπτης παίρνει μια απόφαση μέσα σε αυτόν τον κώδικα και ενεργοποιείται ένα εντελώς διαφορετικό σύστημα λειτουργιών.
Η λειτουργική δυναμική δεν αφορά μόνοΌχι τόσο πολύ οι χειριστές που έχουν ανατεθεί στα στοιχεία σελίδας, αυτές είναι συναρτήσεις που διαμορφώνουν τα στοιχεία σελίδας, επίσης, οι άμεσοι χειριστές μπορούν επίσης να αλλάξουν.
Η ενέργεια στη σελίδα ξεδιπλώνεται ανάλογα με τα στοιχεία της και τη συμπεριφορά του επισκέπτη σε αυτήν. Οι κινήσεις του ποντικιού, τα κουμπιά πληκτρολογίου, τα κλικ, τα συμβάντα στοιχείων και άλλες περιστάσεις ενεργοποιούν τις επιθυμητές λειτουργίες.
Αρχικά δεν υπάρχει αλληλουχία καιδεν υπάρχει παραλληλισμός. Υπάρχει επαρκής απάντηση του διαδικτυακού πόρου σε εκδηλώσεις. Το πόσο γρήγορα θα δουλέψει η JavaScript μια συγκεκριμένη λειτουργία εξαρτάται από πολλούς τεχνικούς (υπολογιστές, γραμμές επικοινωνίας) και σημασιολογικούς παράγοντες (λογική αλγορίθμου, περιοχή θέματος, έννοια του προβλήματος).
Στην πραγματικότητα, μπορεί να υποστηριχθεί ότι κάτι λειτούργησεπαράλληλα, και κάτι θα εκπληρωθεί μετά από κάτι, αλλά δεν υπάρχει ιδιαίτερη έννοια σε αυτό. Είναι σημαντικό οι λειτουργίες JavaScript να είναι η δυνατότητα δημιουργίας κατάλληλης απόκρισης στις ενέργειες ενός επισκέπτη.
Αυτή είναι μια νέα σκέψη στην ανάπτυξη: διανεμημένη επεξεργασία πληροφοριών στα έντερα ενός προγράμματος περιήγησης!
Οι μεταβλητές JavaScript τοποθετούνται όπως σε μια ετικέτα"Σενάριο" και στο σώμα της συνάρτησης. Οι συναρτήσεις ορίζονται με τον ίδιο τρόπο. Δεν υπάρχει ιδιαίτερο σημείο στη σύνταξη μιας άλλης συνάρτησης μέσα στη συνάρτηση, αλλά μπορεί να είναι απαραίτητη για διάφορους και αρκετά λογικούς λόγους.
Μια περιγραφή της συνάρτησης ξεκινά γενικά με τη λέξη-κλειδί "συνάρτηση", ακολουθούμενη από το όνομά της, μια λίστα ορισμάτων διαχωρισμένων με κόμμα σε παρενθέσεις και το σώμα της συνάρτησης σε σγουρά αγκύλες.
Αυτό το παράδειγμα περιγράφει δύο λειτουργίες που παρέχουν επικοινωνία AJAX μεταξύ της σελίδας και του διακομιστή. Η μεταβλητή scXHR περιγράφεται παραπάνω, οπότε είναι διαθέσιμη τόσο στο InitXML όσο και στο WaitReplySC.
Μια ασύγχρονη επιλογή παρουσιάστηκε εδώ ότανΗ συνάρτηση JavaScript στη συνάρτηση καλείται μετά την απόκριση του διακομιστή. Ταυτόχρονα, έχοντας λάβει μια απάντηση από το διακομιστή, το WaitReplySC αναφέρεται στις ετικέτες σελίδας, τις συμπληρώνει με τις ληφθείσες πληροφορίες και καλεί άλλες λειτουργίες που ενδέχεται να ξεκινήσουν το επόμενο αίτημα στον διακομιστή.
Είναι επίσης σημαντικό να σημειωθεί εδώ ότι το WaitReplySC είναι μια συνάρτηση. Αλλά στη σειρά scXHR.onreadystatechange = WaitReplySC περνά ως παράμετρος.Αυτός είναι ένας γενικός κανόνας για τη μετάδοση συναρτήσεων σε άλλες λειτουργίες ως παραμέτρους. Καθορισμένες παρενθέσεις και πέρασαν τις παραμέτρους τους σε αυτές - η λειτουργία θα εκτελεστεί αμέσως. Μόνο το όνομα πέρασε, λοιπόν τι; Η κλήση λειτουργίας θα πραγματοποιηθεί από αυτόν που έλαβε το όνομά του.
Η λειτουργία AJAX σάς επιτρέπει Κλήση λειτουργίας JavaScript μέσω δεδομένων που λαμβάνονται από το διακομιστή. Στην πραγματικότητα, κατά την αποστολή ενός αιτήματος στον διακομιστή, αυτή ή αυτή η συνάρτηση ενδέχεται να μην "γνωρίζει" καθόλου σε ποια λειτουργία αναφέρεται και με ποιες πληροφορίες.
Οποιοσδήποτε χειριστής μπορεί να γραφτεί στο σώμα της συνάρτησηςγλώσσα, η οποία, στην πραγματικότητα, προορίζεται για αυτό. Μέσα σε μια συνάρτηση, είναι διαθέσιμες μεταβλητές που περιγράφονται εντός και εκτός αυτής, αλλά όχι εκείνες που περιγράφονται σε άλλες συναρτήσεις.
Εάν θέλετε να επιστρέψει η λειτουργίααποτέλεσμα, μπορείτε να χρησιμοποιήσετε τον χειριστή επιστροφής JavaScript: return. Μπορεί να υπάρχει επαρκής αριθμός δηλώσεων επιστροφής στο σώμα λειτουργίας. Δεν είναι καθόλου απαραίτητο όλοι να επιστρέψουν τον ίδιο τύπο αποτελέσματος.
Συνήθως, οι προγραμματιστές σέβονται πολύ αυτήν τη δυνατότητα και, ανάλογα με την κατάσταση, αποφασίζουν να αποχωρήσουν από τη λειτουργία το συντομότερο δυνατό.
Δεν είναι καθόλου απαραίτητο να εκτελέσετε ολόκληρο τον αλγόριθμο της λειτουργίας, όταν μπορείτε να βγείτε νωρίς.
Τα ορίσματα στη συνάρτηση περνούν ως λίστα μέσωκόμμα, περικλείονται σε παρένθεση και εμφανίζονται αμέσως μετά το όνομά του. Τα μεταβλητά ονόματα χρησιμοποιούνται ως ορίσματα, αλλά μπορείτε επίσης να μεταβιβάσετε τιμές απευθείας. Για να μεταβιβάσετε μια συνάρτηση σε μια συνάρτηση σε JavaScript, απλά πρέπει να καθορίσετε το όνομά της χωρίς παρενθέσεις.
Η μεταβλητή ορισμάτων είναι διαθέσιμη μέσα στη συνάρτηση, έχοντας ιδιοκτησία μήκος. Μπορείτε να ανατρέξετε σε οποιοδήποτε όρισμα συνάρτησης μέσω ορίσματα [0], ορίσματα [1], ... μέχρι τα τελευταία ορίσματα [επιχειρήματα.length-1].
Η αλλαγή ορίσματος λειτουργίας είναι πραγματικά μέσαλειτουργία, αλλά όχι έξω από αυτήν. Για να αλλάξετε κάτι εκτός της συνάρτησης, πρέπει να χρησιμοποιήσετε τον χειριστή επιστροφής JavaScript, μέσω του οποίου μεταβιβάζετε την απαιτούμενη τιμή προς τα έξω.
Αφού ολοκληρωθεί η λειτουργία, όλα αυτάσυσχετίστηκε με την εκτέλεση του, θα καταστραφεί. Κατά την εκτέλεση, η συνάρτηση μπορεί να αλλάξει εξωτερικές μεταβλητές, εκτός από εκείνες που περιγράφονται σε άλλες συναρτήσεις, συμπεριλαμβανομένων των εσωτερικών.
Η Arguments έχει ιδιοκτησία callee η οποίαπροορίζεται να καλέσει μια συνάρτηση που εκτελείται σε μια δεδομένη στιγμή. Εάν καλέσετε τον εαυτό σας, τότε η παραλλαγή JavaScript της συνάρτησης στη συνάρτηση θα σας επιτρέψει να εφαρμόσετε αναδρομή.
Το κύριο μέλημα των λειτουργιών είναι η εξυπηρέτηση εκδηλώσεωνπρόγραμμα περιήγησης. Για να γίνει αυτό, σχεδόν κάθε ετικέτα έχει τη δυνατότητα να καθορίσει το όνομα του συμβάντος και τη λειτουργία που το χειρίζεται. Μπορούν να καθοριστούν πολλαπλά συμβάντα, αλλά καθορίζεται μόνο μία συνάρτηση ανά συμβάν.
Μία λειτουργία μπορεί να εξυπηρετήσει πολλά στοιχεία σελίδας και πολλαπλά συμβάντα. Χρησιμοποιώντας την παράμετρο "αυτό", μπορείτε να μεταβιβάσετε πληροφορίες στη συνάρτηση από την οποία κλήθηκε.
Κλασική χρήση των λειτουργιών JS -χειριστές εκδηλώσεων σε στοιχεία. Σε αυτό το παράδειγμα, η συνάρτηση scfWecomeGo () ή scfWelcomeCancel () θα κληθεί στη φόρμα σύνδεσης / αποσύνδεσης του επισκέπτη και όταν επιλεγεί η λειτουργία, scfMenuItemClick (αυτό).
Στην τελευταία περίπτωση, η παράμετρος "αυτό" περνά,που σας επιτρέπει να ανακαλύψετε θαυμαστικά από ποια ντίβα προήλθε η κλήση. Σε γενικές γραμμές, η JavaScript εμφυτεύεται τόσο καλά στο DOM και σας επιτρέπει να πλοηγηθείτε στα στοιχεία της τόσο άνετα, για να συλλέξετε τις απαραίτητες πληροφορίες, ώστε η δυναμική της σελίδας να είναι απλώς απρόβλεπτη.
Η συνάρτηση δεν χρειάζεται να επιστρέψει μια συμβολοσειράχαρακτήρες, αριθμός ή άλλη συνάρτηση. Μπορεί να επιστρέψει ένα πλήρες στοιχείο HTML, στο οποίο θα υπάρχει ο απαιτούμενος αριθμός στοιχείων, με τους δικούς του χειριστές συμβάντων.
Τοποθετώντας ένα τέτοιο στοιχείο στη σελίδα, ο προγραμματιστής δημιουργεί νέα λειτουργικότητα, η οποία είναι καλή όσον αφορά την επίλυση του προβλήματος και την ικανοποίηση των συμφερόντων των επισκεπτών, αλλά μάλλον δύσκολη όσον αφορά την εφαρμογή.
Ξεκινώντας μια τέτοια πλήρως λειτουργική ανάπτυξη,είναι εύκολο να μπερδεύεσαι με τον δικό σου κωδικό, στις κλήσεις λειτουργίας, στις στιγμές που σχηματίζεται αυτό ή εκείνο το περιεχόμενο αυτού ή εκείνο το τμήμα της σελίδας. Πριν πάρετε αυτήν την κατεύθυνση ανάπτυξης, δεν είναι κακό να ζυγίζετε τα πάντα καλά.
Ο προγραμματιστής πρέπει να σκέφτεται στο επίπεδο όλων των στοιχείων της σελίδας, στο επίπεδο όλων των εκδηλώσεων και να έχει μια σαφή ιδέα για το πώς πραγματικά συμβαίνουν όλα. Είναι δύσκολο, αλλά το έργο αξίζει τον κόπο.
Στο JavaScript, η εκτέλεση της λειτουργίας μπορεί να είναιαναβάλλεται μέχρι κάποιο συμβάν, και μπορεί να υπάρχουν πολλές τέτοιες λειτουργίες, και τα γεγονότα τείνουν να διαδίδονται και να εμπίπτουν στο «πεδίο» των διαφόρων χειριστών.
Σε αυτό το παράδειγμα, κάπου νωρίτερα,τη συνάρτηση που ενεργοποίησε τη δημιουργία του στοιχείου μενού πλοήγησης αρχείων. Υποτίθεται ότι η οργάνωση σελίδων, δηλαδή, υπάρχουν μόνο επτά αρχεία στο παράθυρο που μπορούν να διαγραφούν και να υποστούν επεξεργασία. Μπορείτε να πλοηγηθείτε είτε κάνοντας κλικ σε μια γραμμή στο αρχείο, είτε με βέλη στο πληκτρολόγιο ή σε τμήματα επτά γραμμών.
Κάθε περίπτωση έχει τις δικές της λειτουργίες.Με άλλα λόγια, σε ένα τόσο απλό παράδειγμα, πρέπει να γράψετε μερικές δωδεκάδες συναρτήσεις που θα ανταποκρίνονται σε διάφορα συμβάντα και ορισμένες από αυτές τις λειτουργίες θα χειριστούν διάφορες επιλογές και καταστάσεις που δεν είναι καθόλου γεγονότα.
Για παράδειγμα, όταν διαγράφετε μια γραμμή, το κάτω μέρος πρέπειανεβείτε. Για να το κάνετε αυτό, θα πρέπει είτε να κάνετε μια νέα επιλογή, η οποία είναι βασική και ένταση πόρων, είτε για να υπολογίσετε ξανά τις γραμμές, να χρησιμοποιήσετε συναρτήσεις πίνακα σε javascript και να επιτύχετε τον στόχο κομψά.
Το JavaScript σας επιτρέπει να μετατρέψετε τον κωδικό σας σε"Πλήρως λειτουργική" κατάσταση. Είναι φυσιολογικό όταν το όρισμα συνάρτησης είναι συνάρτηση. Επιτρέπεται μια παραλλαγή όταν η συνάρτηση επιστρέφει μια συνάρτηση. Το JavaScript το παίρνει πολύ ήρεμα.
Αυτός είναι ένας καλός μηχανισμός, αλλά αρκετά περίπλοκος για εφαρμογή. Τεχνικά, όλα επιτρέπονται, σημασιολογικά, μόνο ένας εξειδικευμένος προγραμματιστής μπορεί να παρέχει τη λογική της μεταφοράς του "λειτουργικού".
Όταν βρίσκεστε σε JavaScript, μια συνάρτηση μέσα σε μια συνάρτηση - οπουδήποτεπήγε, αλλά όταν μια συνάρτηση δημιουργεί μια συνάρτηση, και μια άλλη, είναι αρκετά δύσκολο να παρακολουθείτε τη λογική. Στην πραγματικότητα, η ερώτηση δεν αφορά την υποβολή προσόντων, αλλά το να πάρει ένα ασφαλές και σωστό αποτέλεσμα.
Η ανησυχία του προγραμματιστή είναι ξεκάθαρη και απλή. Υπάρχει ένα πρόβλημα, χρειάζεστε μια λύση, όχι ένα σφάλμα όπως "Σφάλμα JavaScript η λειτουργία είναι ανασφαλής", μια κενή οθόνη ή διακοπή ολόκληρης της μηχανής του προγράμματος περιήγησης.
Εάν το όρισμα είναι συνάρτηση, τότεο προγραμματιστής μεταβιβάζει μια μεταβλητή με ειδικές ιδιότητες, δηλαδή δεν είναι αριθμός, ούτε συμβολοσειρά, ούτε αντικείμενο. Αλλά η χρήση ενός τέτοιου επιχειρήματος μπορεί να οδηγήσει στο γεγονός ότι οι εξωτερικές μεταβλητές θα αλλάξουν και το αποτέλεσμα της εκτέλεσης της συνάρτησης θα είναι. Ανάλογα με το τι μεταφέρεται, θα υπάρξουν επαρκείς αλλαγές.
Εφαρμόστε την εκτέλεση του κώδικα που δημιουργήθηκε στοενώ εκτελείται άλλος κωδικός, μπορείτε να χρησιμοποιήσετε το "eval" Αυτό δεν θεωρείται εξαιρετική λύση, αλλά συχνά δεν μπορείτε να περιπλέξετε τον κώδικα με περιττές λειτουργίες, αλλά να περιορίσετε τον αποκλειστικό σχηματισμό μιας γραμμής κώδικα JavaScript και απλώς να τον εκτελέσετε.
Σε αυτό το παράδειγμα, μια γραμμή εισαγωγής σχηματίζεται στοενεργώντας div κάποιες πληροφορίες. Ο αριθμός div και το περιεχόμενο πληροφοριών διαφέρουν για διαφορετικές θέσεις, επομένως μια τέτοια λύση σε αυτήν την περίπτωση είναι εγγυημένη ότι δεν παρέχει την κατάσταση "σφάλμα javascript η λειτουργία είναι ανασφαλής", αλλά θα δώσει αξιόπιστα το επιθυμητό αποτέλεσμα.
Εάν υπάρχει μια ευκαιρία να κάνετε χωρίς περιττώματα, είναι καλύτερα να το χρησιμοποιήσετε. Όλες αυτές οι επιλογές είναι καλές. Φυσικά, σε πολλές περιπτώσεις αυτή είναι η μόνη λύση.
Ένα κλασικό παράδειγμα αναδρομής: υπολογισμός του παραγοντικού. Είναι πολύ δύσκολο να γράψεις έναν αλγόριθμο που βγαίνει, αλλά είναι πολύ εύκολο να ξεπεράσεις τα όρια της τιμής. Το παραγοντικό αναπτύσσεται πολύ γρήγορα.
Ωστόσο, τόσο η επανάληψη όσο και μια συνάρτηση που καλεί μια άλλη λειτουργία που μπορεί να κάνει μια έγκυρη επανάκληση είναι ο κανόνας.
Για παράδειγμα, ένας κανονικός πίνακας. Μπορεί να υπάρχουν άλλοι πίνακες στον πίνακα. Η ένθεση δεν μπορεί να περιοριστεί. Η σύνταξη ενός ξεχωριστού συνόλου λειτουργιών για κάθε τραπέζι είναι πάρα πολύ πολυτέλεια.
Υπάρχουν πολλά τέτοια παραδείγματα και όλαΑυτά θα είναι πραγματικά και επείγοντα καθήκοντα, καθόλου από τον τομέα του προγραμματισμού. Γι 'αυτό το πρόβλημα έγκειται ακριβώς στο γεγονός ότι δεν μπορεί κανείς να κάνει χωρίς υπερβολές, το δημιουργημένο σύστημα λειτουργιών, ή μάλλον ο εντοπισμός σφαλμάτων και η επακόλουθη αξιόπιστη λειτουργία του, γίνεται η ανησυχία όχι του JavaScript, αλλά του προγραμματιστή.