2011-05-04 93 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