如何在javascript中返回值

如何在javascript中返回值,javascript,Javascript,我有一个javascript函数: function myFunction(value1,value2,value3) { //Do stuff and value2=somevalue2 //to return value3=somevalue3 //to return } 函数调用代码: 在这个场景中,如何将value2和value3传递给被调用的方法,或者如何在Java脚本中返回值。Javascript是duck类型的,因此您可以创建一个小结构 fun

我有一个javascript函数:

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

     value2=somevalue2 //to return
     value3=somevalue3 //to return
}
函数调用代码:


在这个场景中,如何将value2和value3传递给被调用的方法,或者如何在Java脚本中返回值。

Javascript是duck类型的,因此您可以创建一个小结构

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
}

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

然后,可以将数组、对象文字或自定义对象传递到方法中以传播值

对象示例:

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
}
数组示例:

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
}
自定义对象:

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
}

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

很难判断您实际要做什么,以及这是否是您真正需要的,但您也可以使用回调:

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
    }
});

我更喜欢回调解决方案: 在这里演奏小提琴:


return语句
停止函数的执行,并从该函数返回值

虽然更新全局变量是将信息传递回调用
函数的代码的一种方法,但这不是一种理想的方法。更好的替代方法是编写函数,以便将函数使用的值作为参数传递给它,并且函数返回它需要的任何值,而无需使用或更新任何
全局变量

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

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


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

答案很好地涵盖了内容。我只是想指出,
输出参数的机制,如问题中所描述的,并不是很javascriptish。虽然其他语言支持它,但javascript更希望您只从函数返回值

在ES6/ES2015中,他们添加了一项新功能,使该问题的解决方案在返回阵列时更加优雅。分解结构将从数组/对象中提取部分:

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

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

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

这很简单。使用参数在另一个函数中调用一个函数

    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

除了不能将成员添加到未初始化的变量。该变量不起作用且不执行任何操作。它在我有myObject.Value2,myObject.Value3的那条线上断开了。有什么建议吗?为什么要回电话?除非需要异步性,否则这似乎是一个特别复杂的解决方案。