Как вернуть значения в 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
}
в этом сценарии, как передать value2 и value3 вызываемому методу или как вернуть значения в Java script.
Ответы
Ответ 1
Вы можете вернуть массив, литерал объекта или объект созданного вами типа, который инкапсулирует возвращаемые значения.
Затем вы можете передать массив, объектный литерал или настраиваемый объект в метод для распространения значений.
Пример объекта:
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
}
Я бы избегал метода массива, потому что вам нужно было бы получить доступ к значениям через индексы, а не с именами свойств объекта.
Ответ 2
Javascript - это утка, напечатанная, поэтому вы можете создать небольшую структуру.
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
}
Ответ 3
function myFunction(value1,value2,value3)
{
return {val2: value2, val3: value3};
}
Ответ 4
Трудно сказать, что вы на самом деле пытаетесь сделать, и если это то, что вам действительно нужно, но вы также можете использовать обратный вызов:
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
Я бы предпочел решение обратного вызова:
Рабочая скрипка здесь: 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 );
}
});
Ответ 6
return statement
останавливает выполнение функции и returns a value
из этой функции.
Обновление глобальных переменных - это один из способов передачи информации обратно в код, который называется function
, это не идеальный способ сделать это. Гораздо лучшей альтернативой является запись функции, так что значения, которые используются функцией, передаются ей как параметры, и функция возвращает любое значение, которое ему нужно, без использования или обновления каких-либо global variables
.
Ограничивая способ передачи информации и из функций, мы можем упростить повторное использование одной и той же функции из нескольких мест в нашем коде.
JavaScript предоставляет возможность передать одно значение обратно коду, вызвавшему его после того, как все в функции, которая должна быть запущена, закончена.
JavaScript передает значение из функции обратно в код, вызывающий его, с помощью return statement
. Возвращаемое значение указывается в ключе return
.
Ответ 7
Ответы очень хорошо освещены. Я просто хотел указать, что механизм 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
}
Ответ 8
Это очень просто. Вызовите одну функцию внутри другой функции с параметрами.
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