Jedermanns Liebling: Zeit für ein Konzeptvideo! Callbacks sind ein wichtiges Konzept in JavaScript. Es sind Funktionen, die aufgerufen werden, wenn eine Aktion abgeschlossen ist. Sie verleihen unserem Code Struktur und Timing.
Nehmen wir zum Beispiel die Animation, die wir im letzten Video verwendet haben. Animationen brauchen Zeit, um ausgeführt zu werden. Was, wenn Sie möchten, dass etwas anderes passiert, sobald diese Animation beendet ist? Müssen Sie `setTimeout` für die gleiche Dauer wie die Animation verwenden? Nein. jQuery bietet uns Callback-Funktionen, die genau zu diesem Zweck verwendet werden.
Sie sind typischerweise ein zusätzlicher Parameter, den wir an die Methode übergeben. Im Fall von Animationen übergeben wir eine Funktion als letzten Parameter. Das ist die Callback-Funktion und sie wird aufgerufen, wenn die Animation abgeschlossen ist.
$("#element").animate({
// stuff to animate
}, function() {
// callback function
});
Das sieht vielleicht etwas seltsam aus, aber im Wesentlichen machen wir Folgendes:
.animate(a, b)
Wobei `a` ein Objekt von Eigenschaften und Werten ist und `b` eine Callback-Funktion.
Aber wir wissen aus dem letzten Video, dass Animationen auch einen Timing-Parameter annehmen können, der angibt, wie lange eine Animation dauern wird. Wo geht das hin? Das ist ein *optionaler* Parameter, genauso wie die Callback-Funktion. Wenn wir ihn verwenden wollten, würden wir ihn genau in die Mitte setzen, also im Grunde:
.animate(propertiesObject, duration, callback);
Und es gibt noch einen optionalen Parameter, einen String, den wir übergeben können, um einen Easing-Wert anzugeben.
.animate(propertiesObject, duration, easing, callback);
jQuery ist einfach cool und intelligent genug für diese optionalen Parameter. Wenn Sie die beiden mittleren auslassen und nur den Callback übergeben, kann es erkennen, dass Sie eine Funktion übergeben und keine Zahl oder einen String, also weiß es, dass Sie eine Callback-Funktion meinen. Sie müssen keine Platzhalterwerte oder Ähnliches übergeben. Das ist einfach gutes API-Design!
Wenn Sie die jQuery-Dokumentation lesen, zeigen sie es so an:
.animate( properties [, duration ] [, easing ] [, complete ] )
Direkt danach erklären sie die erwarteten Typen.
Aber zurück zu Callbacks. Sie können ziemlich verschachtelt werden. Stellen Sie sich vor, Sie setzen eine weitere Animation in die Callback-Funktion, und diese Animation hat ihre eigene Callback-Funktion. Das ist völlig in Ordnung, da Sie vielleicht eine mehrstufige Animation durchführen möchten. Sie müssen nur organisiert bleiben.
Siehe den Pen 450c5810be27a9a8946cb8012cbd1213 von Chris Coyier (@chriscoyier) auf CodePen
Wir verwenden hier nur Animation als Beispiel. Vielleicht ist eine noch häufigere Verwendung von Callback-Funktionen Ajax. Ajax ist, wenn der Browser eine andere Ressource abruft, ohne die Seite neu zu laden. Das kann eine völlig unbekannte Zeit dauern. Es hängt von der Bandbreite und Latenz und der Größe der Datei und Fehlerbedingungen und all diesen Dingen ab. Sie können wahrscheinlich nichts mit dieser Ajax-Anfrage tun, bis Sie etwas zurückbekommen oder anderweitig weitere Informationen erhalten. Callback-Funktionen sind perfekt dafür, und damit werden wir uns später beschäftigen.
Der Code ist für mich in diesem Video verschwommen.
1+
keine HD-Option
Ich habe es neu hochgeladen, hoffentlich ist es besser.
Ich könnte falsch liegen – aber ich glaube nicht, dass Sie Semikolons nach diesen Funktionsdeklarationen benötigen – aber Sie würden sie verwenden, wenn Sie einen Funktionsausdruck verwenden würden, d. h. eine Variable.
Stimmt das oder nicht?
So wie diese?
Ich glaube, es ist irgendwie optional. ASI (Auto Semicolon Insertion) wird es für Sie behandeln, wenn es analysiert wird, aber was auch immer, machen Sie es genauso gut selbst und sparen Sie sich möglicherweise einige Schwierigkeiten in der Zukunft.
Umm, das waren nicht die, – weil sie nach einer schließenden Klammer kommen. Die nach den Funktionsdeklarationen, weil keine Klammern da sind...
Das ist mein Verständnis.
Funktionsdeklaration
Funktionsausdruck
Ich denke, das habe ich in meinem großen fetten nerdigen JavaScript-Buch gelesen. Im Grunde genommen bin ich ein Noob, also könnte ich falsch liegen.
Der wichtigere Punkt ist, dass es funktioniert, egal ob Sie das Semikolon für eine Funktionsdeklaration hinzufügen oder nicht, was offensichtlich das Wichtigste ist – d. h. es verursacht keinen Fehler – also habe ich auf jeden Fall etwas gelernt.
Da dies ein ziemlich trivialer Punkt ist, dachte ich nur, ich gebe ein kleines Feedback zu Ihren Lodge-Kursen, insbesondere zu diesem. Sie haben ein großartiges Verständnis dafür, was in Bezug auf Konzepte und Arbeitsablauf usw. wichtig ist und was nicht, und Sie treffen eine großartige Balance zwischen Praktischem und Theoretischem, was ich in keinem anderen Kurs, den ich gesehen habe, gefunden habe.
Ich habe meine JavaScript-Fähigkeiten noch nicht wirklich gut genutzt, aber ich plane, das in Zukunft zu tun – aber ich habe einen guten Überblick über die Syntax und all die tollen Dinge.
Ich freue mich auf das, was Sie als Nächstes herausbringen werden – Sie haben jetzt einen guten Fluss, also hoffe ich, dass Sie sie weiterhin herausbringen!
(Ich wollte ein Bild hinzufügen, um den Teil zu demonstrieren, auf den ich mich bezog, aber weiß wirklich nicht, wie), aber es ist bei 4:00 im Video. Noch einmal, es ist ein sehr trivialer Punkt, und ich bin sicher, Sie haben wichtigere Dinge zu bedenken!)
Tippfehler korrigieren.
http://stackoverflow.com/questions/11978698/do-we-need-a-semicolon-after-function-declaration
Nur für den Fall, dass jemand anderes darüber gestolpert ist und neugierig war.
Ich hatte einen jQuery / JavaScript Aha-Moment, als ich diesen Screencast sah!
Es fängt endlich an, Sinn zu machen. Danke, großartige Inhalte
Seite muss für die Promise-Ära aktualisiert werden.
Wunderbar und sehr lustig. Nett! :)))
Hallo Chris, ich verfolge deine Learn jQuery-Serie. Ich bin ein großer Fan von dir. Ich habe das Video-Tutorial gesehen und bei 3:03 erwähnst du, dass der Entwickler bei der Behandlung von verschachtelten Callbacks seine organisatorischen Fähigkeiten anwenden muss, um den inkonsistenten Programmieransatz auszugleichen, der durch das Verschachteln von Callbacks nacheinander entsteht. Ich stimme dir wirklich zu. Vielen Dank für so wertvolle Inhalte.