Sono abbastanza sicuro che i due snippet seguenti sono equivalenti, ma volevo ricontrollare:
STILE DI CALLBACK
function foo(input, callback) {
// do stuff with input
callback();
}
function bar(input, callback) {
// do stuff with input
callback();
}
foo("hi", bar("bye", function() {
// do something cool
}));
Si noti che i callback non accettano argomenti.
STILE PLAIN
function foo(input) {
// do stuff with input
}
function bar(input) {
// do stuff with input
}
foo("hi");
bar("bye");
(function() {
// do something cool
})();
Naturalmente, se sono equivalenti, per me sarebbe logico utilizzare STILE DI PIÙ in quanto è più semplice e più pulito.
Mi rendo conto che lo scopo della funzione anonima (che fa qualcosa di interessante) è diverso nei due casi .. Non mi interessa l'aspetto di "equivalenza".
Aggiorna
Sto lavorando su qualche codice legacy e ne trovo un po 'confuso. Questo è il codice originale che ha suggerito questa domanda. Specificamente le note 6 o più righe di codice.
var CoolNamespace = (function () {
var container_element,
keysLength = 0;
//
// THE FOLLOWING 6 OR SO LINES IS WHAT I'M CURIOUS ABOUT
//
_createCoolObject(function (coolObject) {
_appendFrameToContainer(coolObject, function () {
// Post form
_sendForm(function (form) {
container_element.appendChild(form);
form.submit();
});
});
});
function _sendForm (callback) {
// Sends client data via post.
if (keysLength != 0) {
var form = _createForm();
} else {
throw new Error("error message stub");
}
callback(form);
}
function _appendFrameToContainer (frame, callback) {
if (typeof container_element != "undefined") {
container_element.appendChild(frame);
} else {
throw new Error("error message stub");
}
callback();
}
function _createCoolObject (callback) {
var coolObject = { level: "very cool" };
callback(coolObject);
}
function _handleMessage (event) {
// it's not really about this function
}
function _createForm() {
// it's not really about this function either
var form;
return form;
}
})();
Quando si passava attraverso il codice, sembrava che il corpo di _createCoolObject
fosse invocato prima dell'argomento (che è una funzione). Penso che la mia confusione fosse che un argomento su _createCoolObject
è una funzione letterale che valuta una funzione ma quella funzione non viene valutata da sé fino alla riga callback(coolObject)
. Grazie per il chiarimento !!