2012-02-24 6 views
6

Digamos que tiene 2 funciones idénticas que no devuelven un valor¿Hay alguna diferencia entre una función con y sin una declaración de devolución?

function a() { 
    // do some interesting things 
} 

function b() { 
    // do the same interesting things 
    return; 
} 

Función b es, obviamente, más detallado, pero ¿hay alguna diferencia funcional entre estos?

+2

Una buena respuesta a esto debe incluir un enlace a la parte pertinente de la ECMA especulación. – georg

+2

devolución; básicamente significa terminar la función aquí. Entonces, si lo tienes como el último trozo de tu función, no hace nada útil. – gintas

+1

12.9 en la especificación, para aquellos interesados. – davin

Respuesta

10

No hay diferencia real; ambos devolverán undefined.

Las funciones sin declaración de retorno devolverán undefined, al igual que las funciones con una instrucción return vacía.


Para confirmar esto por sí mismo, puede ejecutar este código - FIDDLE:

​function a() { 
} 

function b() { 
    return; 
} 

var aResult = a(); 
var bResult = b(); 

alert(aResult === bResult); //alerts true 
1

Generalmente va a devolver un valor. Así, por ejemplo,

function b() { 
    return 'hello'; 
} 

a = b(); 

console.log(a); 

Darán "hola" a su consola.

3

Adam es correcto; Ambas funciones devuelven indefinido, y de cualquier forma es absolutamente correcto si no te importa el valor de retorno (o deseas que el valor no esté definido). Sin embargo, a menudo es mejor en programas más complejos para regresar explícitamente de una función, especialmente porque los programas de Javascript a menudo tienen mecanismos de devolución de llamada complejos. Por ejemplo, en este fragmento de código (sólo un poco más complejo que el suyo) Creo que la instrucción de retorno realmente ayuda a clarificar el código:

function someAsyncFunction(someVar, callback) { 
    // do something, and then... 
    callback(someVar); 
    // will return undefined 
    return; 
} 

function c(){ 
    var someState = null; 
    if (some condition) { 
     return someAsyncFunction(some variable, function() { 
      return "from the callback but not the function"; 
     }); 
     // we've passed the thread of execution to someAsyncFunction 
     // and explicitly returned from function c. If this line 
     // contained code, it would not be executed. 
    } else if (some other condition) { 
     someState = "some other condition satisfied"; 
    } else { 
     someState = "no condition satisfied"; 
    } 
    // Note that if you didn't return explicitly after calling 
    // someAsyncFunction you would end up calling doSomethingWith(null) 
    // here. There are obviously ways you could avoid this problem by 
    // structuring your code differently, but explicit returns really help 
    // avoid silly mistakes like this which can creep into complex programs. 
    doSomethingWith(someState); 
    return; 
} 

// Note that we don't care about the return value. 
c(); 
+3

Totalmente subjetivo, pero estoy totalmente en desacuerdo. No creo que haga que el código sea más fácil de leer. Por el contrario, es innecesario, por lo que solo sirve para desordenar. Mi 2c. Supongo que cada uno es suyo. – davin

Cuestiones relacionadas