2012-02-29 7 views
5

Por ejemplo, ¿son estos dos efectivamente lo mismo?Es "devolución"; necesario/útil al usar devoluciones de llamada en Node.JS?

someFunction(val, callback){ 
    callback(val); 
}; 

y

someFunction(val, callback){ 
    callback(val); 
    return; // necessary? 
}; 
+1

Tenga en cuenta que no puede usar el nombre "var" como nombre de parámetro de función ya que "var" es una palabra clave (que declara variables)! Debería modificar su pregunta y cambiar "var" por "val", o alguna otra cosa para evitar la nit picking en las respuestas =) – maerics

+0

Gracias - ¡cambiado! – randylubin

Respuesta

5

Sí, son lo mismo. Si su función no devuelve un valor, puede omitir la declaración de devolución o usarla sin argumentos; en ambos casos, una llamada a la función devuelve "indefinido".

function f1(){}; 
typeof(f1()); // => "undefined" 

function f2(){return;}; 
typeof(f2()); // => "undefined" 
1

En un sentido general JavaScript, sí, son lo mismo - No veo por qué Node.js serían distintos.

En ambos casos, el valor de retorno de someFunction() será undefined. Si no hay una devolución de llamada dentro de la función es irrelevante.

1

Aparte del hecho de que no se puede tener un parámetro formal llamado var sus dos fragmentos son idénticos y trabajar de la misma manera. Cada function en implicidad de ECMAscript devuelve undefined si no se especifica.

0

Son lo mismo; debe no usar return, porque ponerlo allí será confuso para los lectores ya que no es necesario.

sidenote: En algunos idiomas (pero probablemente no javascript) que la declaración de retorno no podrían incluso ser ejecutados si se habilitan optimizaciones de llamada final (es decir, es razonable que el compilador para eliminar la función de la pila una vez lo dejas si nunca planeas hacer otra cosa). Una vez más, probablemente no sea relevante en ninguna implementación de javascript estándar.

+0

No verdadero: el flujo de control pasará a través de la función de devolución de llamada y volverá a la función envolvente (a menos que se produzca una excepción) hasta que llegue a la instrucción "retorno" y salga de la función. Entonces la declaración es alcanzable (es decir, no es un código muerto), ¡simplemente no hace nada! – maerics

+0

@maerics: Vaya, lo siento, he estado haciendo demasiada programación de devolución de llamada avanzada recientemente. El que el control regrese a estas funciones depende de si la semántica del lenguaje permite el uso de la optimización de la cola de la pila de idiomas. Dudo que este sea el caso con javascript, así que gracias, voy a editar mi respuesta. – ninjagecko

+0

Ah, una idea interesante. De todos modos, sí, AFAIK, ECMAScript no requiere la eliminación de llamadas finales y no creo que ningún intérprete lo haga. – maerics

7

Mientras que son los mismos, se verá algo como lo siguiente de vez en cuando:

someFunction(val, callback){ 
    if (typeof val != 'object') 
    return callback(new Error('val must be an object')); 
    callback(null, val); 
}; 

En otras palabras, el retorno se utiliza para "romper" fuera de la función temprana. Muy a menudo, he visto que se usa con condicionales; prueba una condición de error (devolviendo la devolución de llamada anticipadamente si hay un error), luego evita tener que ajustar el resto de la función en una cláusula else.

Cuestiones relacionadas