Aus irgendeinem Grund habe ich Probleme, meinen Kopf um Rückruffunktionen in JS zu wickeln. Ich denke, dass es endlich geklickt hat, wie man sie benutzt (sorta), aber ich kann immer noch nicht herausfinden, warum ich das tun müsste. Wie unterscheiden sich diese beiden Codeteile und warum sollte die Callback-Version besser sein? Beide machen das Gleiche. Sie beide beseitigen die Notwendigkeit für doppelten Code. Sie haben ungefähr die gleiche Dateigröße. Es ist mir nicht klar, warum ich das Callback-Beispiel über den ersten verwenden würde - zumindest wenn es darum geht, doppelten Code zu verhindern (das ist der Grund, warum ich einen Callback so verwende).Gibt es einen Vorteil, eine Callback-Funktion hier (JavaScript) zu verwenden?
Version 1
// no need to pass a function -- not a callback
function addNumsAndMultiply(num1, num2) {
findSum(num1, num2);
var product = num1 * num2;
alert("The product of " + num1 + " and " + num2 + " is: " + product);
}
function addNumsAndDivide(num1, num2) {
findSum(num1, num2);
var quotient = num1/num2;
alert("The quotient of " + num1 + "/" + num2 + " is: " + quotient);
}
function findSum(num1, num2) {
var sum = num1 + num2;
alert("The sum of " + num1 + " and " + num2 + " is: " + sum);
}
addNumsAndMultiply(3,4);
addNumsAndDivide(30,5);
Version 2
// passed the function -- this is a callback
function addNumsAndWhat(num1, num2, callback) {
var sum = num1 + num2;
alert("The sum of " + num1 + " and " + num2 + " is: " + sum);
callback(num1,num2);
}
function multiply(num1, num2) {
var product = num1 * num2;
alert("The product of " + num1 + " and " + num2 + " is: " + product);
}
function divide(num1, num2) {
var quotient = num1/num2;
alert("The quotient of " + num1 + "/" + num2 + " is: " + quotient);
}
addNumsAndWhat(3,4,multiply);
addNumsAndWhat(30,5,divide);
Der Rückruf ist hier nicht nützlich, aber es ist nützlich, wenn 'addNumsAndWhat' eine Reihe von Sachen asynchron (z. B. spricht mit einem Webserver). Wenn der Webserver antwortet, kann 'addNumsAndWhat' dann den Rückruf verwenden, um ihm zu sagen" Es hat so lange gedauert, aber hier ist die Antwort auf Ihre Frage. " –
Ich stimme Raymond teilweise nicht zu. Eine Callback-Funktion ist nicht nur beim Umgang mit asynchronen Aufgaben hilfreich, sondern auch die einfachste Möglichkeit, das strategische Entwurfsmuster zu implementieren. Es ist eine Möglichkeit, die Code-Duplizierung zu vermeiden. –
@RaymondChen Callbacks werden hauptsächlich für Async verwendet, das ist aber nicht * nur *. –