Es scheint, als ob das erste von Ihnen angegebene Funktionsargument zuerst von der get()
-Funktion aufgerufen wird.
Wenn es aufgerufen wird, werden 3 Parameter für den Anruf bereitgestellt. Innerhalb des Aufrufs muss der Parameter req
ein Objekt sein, dem Sie Eigenschaften zuweisen können. Sie haben die Eigenschaft var
zugewiesen und einen Wert von 'Happy new year!'
angegeben.
Das nächste übergebene Funktionsargument wird über einen Aufruf des Parameters next()
aufgerufen, und dem Aufruf werden erneut 3 Parameter übergeben. Der erste Parameter ist offensichtlich das gleiche Objekt, das dem ersten Aufruf zugewiesen wurde, dem Sie die var
-Eigenschaft zugewiesen haben.
Weil es (anscheinend) das gleiche Objekt ist, ist die Eigenschaft, die Sie zugewiesen haben, noch vorhanden.
Hier ist ein einfaches Beispiel: http://jsfiddle.net/dWfRv/1/(öffnen Sie Ihre Konsole)
// The main get() function. It has two function parameters.
function get(fn1, fn2) {
// create an empty object that is passed as argument to both functions.
var obj = {};
// create a function that is passed to the first function,
// which calls the second, passing it the "obj".
var nxt = function() {
fn2(obj); //When the first function calls this function, it fires the second.
};
// Call the first function, passing the "obj" and "nxt" as arguments.
fn1(obj, nxt);
}
// Call get(), giving it two functions as parameters
get(
function(req, next) {
// the first function sets the req argument (which was the "obj" that was passed).
req.msg = 'Happy new year';
// the second function calls the next argument (which was the "nxt" function passed).
next();
},
function(req) {
// The second function was called by the first via "nxt",
// and was given the same object as the first function as the first parameter,
// so it still has the "msg" that you set on it.
console.log(req.msg);
}
);
Beachten Sie, dass dies ein sehr vereinfachtes Beispiel ist, mit weniger Parameter in den Funktionen. Nicht auch, dass ich var
zu msg
geändert habe, da var
ein reserviertes Wort ist.
Vielen Dank, Patrick. – Latanmos
@Latanmos: Gern geschehen. – user113716
@Patrick Und was, wenn wir mehr Funktionen haben? Wie 'get ([fn1, fn2, fn3, ...]);'? – Latanmos