2011-05-04 16 views
34

que tienen una función javascript:cómo devolver valores en javascript

function myFunction(value1,value2,value3) 
{ 
    //Do stuff and 

    value2=somevalue2 //to return 
    value3=somevalue3 //to return 
} 

llamada a la función de Código: ....

myFunction("1",value2,value3); 

if(value2 && value3) 
{ 
//Do some stuff 
} 

en este escenario cómo pasar valor2 y valor3 a la método llamado o cómo devolver valores en el script de Java.

Respuesta

43

Puede devolver una matriz, un objeto literal o un objeto de un tipo creado que encapsula los valores devueltos.

Luego puede pasar la matriz, el objeto literal o el objeto personalizado a un método para diseminar los valores. ejemplo

objeto: ejemplo

function myFunction(value1,value2,value3) 
{ 
    var returnedObject = {}; 
    returnedObject["value1"] = value1; 
    returnedObject["value2"] = value2; 
    return returnedObject; 
} 

var returnValue = myFunction("1",value2,value3); 

if(returnValue.value1 && returnValue.value2) 
{ 
//Do some stuff 
} 

Matriz: Objeto

function myFunction(value1,value2,value3) 
{ 
    var returnedArray = []; 
    returnedArray.push(value1); 
    returnedArray.push(value2); 
    return returnedArray; 
} 

var returnValue = myFunction("1",value2,value3); 

if(returnValue[0] && returnValue[1]) 
{ 
//Do some stuff 
} 

personalizado:

function myFunction(value1,value2,value3) 
{ 
    var valueHolder = new ValueHolder(value1, value2); 
    return valueHolder; 
} 

var returnValue = myFunction("1",value2,value3); 

// hypothetical method that you could build to create an easier to read conditional 
// (might not apply to your situation) 
if(returnValue.valid()) 
{ 
//Do some stuff 
} 

Evitaría el método de matriz porque tendría que acceder a los valores a través de índices en lugar de propiedades de objeto con nombre.

9

Javascript está escrito en pato, por lo que puede crear una estructura pequeña.

function myFunction(value1,value2,value3) 
{   
    var myObject = new Object(); 
    myObject.value2 = somevalue2; 
    myObject.value3 = somevalue3; 
    return myObject; 
} 


var value = myFunction("1",value2,value3); 

if(value.value2 && value.value3) 
{ 
//Do some stuff 
} 
+0

excepto que no puede agregar miembros a una variable no inicializada. – rob

+0

no funciona y no hace nada. se está rompiendo en la línea que tenía myObject.Value2, myObject.Value3. ¿Alguna sugerencia? – user695663

+0

lo siento, se olvidó de inicializarlo. Lo he actualizado –

2

Es difícil decir lo que en realidad está tratando de hacer y si esto es lo que realmente necesita, pero también se podría utilizar una devolución de llamada:

function myFunction(value1,callback) 
{ 
    //Do stuff and 

    if(typeof callback == 'function'){ 
     callback(somevalue2,somevalue3); 
    } 
} 


myFunction("1", function(value2, value3){ 
    if(value2 && value3) 
    { 
    //Do some stuff 
    } 
}); 
5
function myFunction(value1,value2,value3) 
{   
    return {val2: value2, val3: value3}; 
} 
2

yo preferiría una solución de devolución de llamada: trabajando violín aquí: http://jsfiddle.net/canCu/

function myFunction(value1,value2,value3, callback) { 

    value2 = 'somevalue2'; //to return 
    value3 = 'somevalue3'; //to return 

    callback(value2, value3); 

} 

var value1 = 1; 
var value2 = 2; 
var value3 = 3; 

myFunction(value1,value2,value3, function(value2, value3){ 
    if (value2 && value3) { 
     //Do some stuff 
     alert(value2 + '-' + value3); 
    }  
}); 
+3

¿Por qué una devolución de llamada? A menos que haya una necesidad de asincronicidad, esto parece una solución particularmente intrincada. – rob

1

el return statement detiene la ejecución de una función y returns a value de esa función.

Mientras que la actualización de las variables globales es una manera de pasar información de vuelta al código que llama el function, esto no es una forma ideal de hacerlo. Una alternativa mucho mejor es escribir la función para que los valores que utiliza la función se le pasen como parámetros y la función devuelva el valor que necesite sin usar ni actualizar ningún global variables.

Al limitar la forma en que la información se pasa hacia y desde las funciones que puede hacer que sea más fácil de reutilizar la misma función desde varios lugares en nuestro código.

JavaScript proporciona devolver un valor al código que lo llamó después de que todo en la función que debe ejecutarse haya terminado de ejecutarse.

JavaScript pasa un valor de una función de vuelta al código que llama mediante el uso de la return statement. El valor que se devolverá se especifica en la palabra clave return.

0

Las respuestas cubren las cosas muy bien. Solo quería señalar que el mecanismo de out parameters, como se describe en la pregunta, no es muy Javascript. Si bien otros idiomas lo admiten, javascript prefiere que simplemente devuelva valores de las funciones.

Con ES6/ES2015 agregaron destructuring que hace que una solución a este problema sea más elegante al devolver una matriz. La desestructuración sacará partes de una matriz/objeto:

function myFunction(value1) 
{ 
    //Do stuff and 
    return [somevalue2, sumevalue3] 
} 

var [value2, value3] = myFunction("1"); 

if(value2 && value3) 
{ 
    //Do some stuff 
} 
-1

Es muy simple. Llame a una función dentro de otra función con parámetros.

function fun1() 
    { 
    var a=10; 
    var b=20; 
    fun2(a,b); //calling function fun2() and passing 2 parameters 
    } 

    function fun2(num1,num2) 
    { 
    var sum; 
    sum = num1+num2; 
    return sum; 
    } 

    fun1(); //trigger function fun1 
Cuestiones relacionadas