2016-07-12 14 views
0

Ich habe nach Rückruffunktionen gesucht und was ich bisher verstanden habe, ist die Rückruffunktion ist eine Funktion, die als Argument an eine andere Funktion übergeben wird.Vorteile der Rückruffunktion im einfachen Englisch mit realen Beispielen?

Warum Rückruffunktionen verwenden? Was sind die Vorteile von Rückruffunktionen? Es gibt viele Antworten auf den Stack-Overflow und andere Webseiten, aber keiner von ihnen hat mir geholfen, die wirklichen Vorteile von Callback zu verstehen.

+2

Asynchrone Operationen. Ein einfaches Beispiel für die Verwendung eines Callbacks finden Sie unter [setTimeout] (https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout). –

+0

Sie sollten die Frage formulieren: "Was sind die Vorteile von' Promise's? " – ftor

Antwort

0

JavaScript hat einen einzigen Thread der Ausführung.

JavaScript verhindert nicht den laufenden Thread.

Nichts anderes in Ihrem Programmcode kann ausgeführt werden, bis der Aufrufstapel geleert wurde. Dies wird "bis zur Fertigstellung" genannt.

Daher blockiert alles, was in Ihrem Programm läuft, alles andere (buchstäblich ALLES).

Also, wenn Sie etwas haben, das durch etwas anderes als CPU (wie eine Netzwerkanforderung oder Warten auf den Benutzer) gebunden ist, dann ist es sehr verschwenderisch in Bezug auf CPU, weil der Thread der Ausführung durch einfaches Warten blockiert ist etwas passieren. Die CPU befindet sich also im Leerlauf.

Die JavaScript-Laufzeit bietet daher Mechanismen zur Vermeidung dieses Szenarios. Es macht Funktionalität, die durch Warten gekennzeichnet ist (wie Netzwerkanforderungen) asynchron.

Dies bedeutet, dass der JavaScript-Thread der Ausführung fortgesetzt werden kann, während die Laufzeit auf Sie wartet.

Sie können diesen asynchronen Funktionen einen Rückruf zuweisen, um die Fortsetzung anzugeben. h. wo der Kontrollfluss abholen sollte, wenn der asynchrone Vorgang abgeschlossen ist.

Wenn der asynchrone Vorgang abgeschlossen ist, fügt die Laufzeitumgebung einen "Job" in eine "Job Queue" ein, die für die Laufzeit intern ist.

Diese Jobs kapseln den Funktionszeiger (Callback) und die Argumente, die beim Aufruf des Callbacks verwendet werden sollen.

Wenn der Aufrufstapel als nächstes leer ist und wenn andere Aufträge in der Warteschlange abgeschlossen wurden, wird der Auftrag aus der Auftragswarteschlange entfernt und ein Stapelrahmen wird instanziiert ("Ausführungskontext") und auf den Stapel gelegt.

Die Laufzeit beginnt dann mit der Ausführung von diesem Stapelrahmen.

Manchmal ist diese Art von Verhalten in eine Versprechen API verpackt, um es noch bequemer zu machen, aber die Mechanik ist die gleiche.

setTimeout(callback, 2000); 
 
document.write('Cool, I can do some stuff while the setTimeout is waiting.'); 
 

 
function callback() { 
 
    document.write('Hello from the callback.'); 
 
}

2

Die Vorteile zeigt, in erster Linie in asynchronen Funktionen.

  1. Verhindern Sie unnötige Überprüfung in Ihrem Skript-Code. Zum Beispiel mit Ajax, um Antwort zu erhalten: var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { // things you want to perform after request is done. }; xhttp.open("GET", url, true); xhttp.send();
    Auf diese Weise müssen Sie nicht kontinuierlich überprüfen, ob die Anfrage wie mit setInterval(...) durchgeführt wird.

  2. Umgang mit DOM-Ereignissen. Alle DOM-Ereignisse müssen Rückrufe verarbeiten, da Sie nicht vorhersagen können, wann das Ereignis ausgelöst wird.
    Zum Beispiel:
    object.onclick=function(){// things you want to perform after the object is clicked};

  3. eine erweiterbare api oder Plugin erstellen. Zum Beispiel:
    var yourApi = function(passInCallback){ var args; //do some common things... passInCallback(args); }
    Dann können Ihre API-Benutzer verschiedene Verhaltensweisen ausführen, nachdem sie gemeinsame Funktionen ausführen.

Das ist alles, was ich für jetzt kommen kann.

Verwandte Themen