2011-05-04 91 views
34

我有一个JavaScript函数:在代码如何返回值在JavaScript

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

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

函数调用: ....

myFunction("1",value2,value3); 

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

在这种情况下如何传递值2和值3的所谓的方法或如何在Java脚本中返回值。

回答

43

您可以返回一个数组,对象文本或您创建的封装了返回值的类型的对象。

然后,您可以将数组,对象字面量或自定义对象传递到传播值的方法中。

对象例如:

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 
} 

阵列例如:

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 
} 

自定义对象:

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 
} 

我会避免使用数组方法,因为您必须通过索引访问值而不是命名对象属性。

9

JavaScript是duck typed,所以你可以创建一个小结构。

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

除了您不能将成员添加到未初始化的变量。 – rob 2011-05-04 17:33:00

+0

它不工作,什么都不做。它打破了我有myObject.Value2,myObject.Value3的行。有什么建议么? – user695663 2011-05-04 17:36:21

+0

抱歉,忘记初始化它。我已经更新了 – 2011-05-04 18:24:44

2

这很难告诉你实际上要做的,如果这是你真正需要的,但你也可以使用一个回调:

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

我宁愿一个回调的解决方案: 在这里工作的小提琴: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

为什么要回拨?除非需要异步性,否则这似乎是一个特别复杂的解决方案。 – rob 2011-05-04 18:23:25

1

return statement停止函数从该函数的执行和returns a value

更新全局变量是将信息传递回名为function的代码的一种方法,但这不是一种理想的方式。更好的选择是编写该函数,以便该函数使用的值作为参数传递给它,并且该函数返回所需的任何值,而不使用或更新任何global variables

通过限制信息传入和传出函数的方式,我们可以更容易地从代码中的多个位置重用相同的函数。

JavaScript提供了将一个值传回给需要运行的函数中的所有内容完成运行后调用它的代码。

JavaScript将函数中的值传回给使用return statement调用它的代码。要返回的值在return关键字中指定。

0

答案涵盖了很好的东西。我只想指出,out parameters,如问题中所述的机制是不是javascriptish。虽然其他语言支持它,但JavaScript更喜欢简单地从函数返回值。

随着ES6/ES2015他们增加了destructuring,这使得在返回数组时更优雅的解决方案。解构将拉出部分阵列/物体:

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

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

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

它非常简单。用参数调用另一个函数中的一个函数。

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