我试图在JavaScript中返回两个值。这可能吗?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
我试图在JavaScript中返回两个值。这可能吗?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
当前回答
都是正确的。Return逻辑地从左到右处理并返回最后一个值。
function foo(){
return 1,2,3;
}
>> foo()
>> 3
其他回答
除了像其他人推荐的那样返回一个数组或对象,你还可以使用一个收集器函数(类似于在the Little Schemer中找到的那个):
function a(collector){
collector(12,13);
}
var x,y;
a(function(a,b){
x=a;
y=b;
});
我做了一个jsperf测试,看看这三个方法中哪一个更快。数组是最快的,收集器是最慢的。
http://jsperf.com/returning-multiple-values-2
从ES6开始,你可以这样做
let newCodes = function() {
const dCodes = fg.codecsCodes.rs
const dCodes2 = fg.codecsCodes2.rs
return {dCodes, dCodes2}
};
let {dCodes, dCodes2} = newCodes()
返回表达式{dCodes, dCodes2}是属性值的简写,等价于这个{dCodes: dCodes, dCodes2: dCodes2}。
最后一行的赋值叫做对象析构赋值。它提取对象的属性值并将其赋值给同名变量。如果你想把返回值赋给不同名称的变量,你可以这样做let {dCodes: x, dCodes2: y} = newCodes()
我建议使用最新的解构赋值(但要确保它在您的环境中得到支持)
var newCodes = function () {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return {firstCodes: dCodes, secondCodes: dCodes2};
};
var {firstCodes, secondCodes} = newCodes()
我们做不到你想做的事。但可能低于这个水平的事情是可以做到的。
function multiReturnValues(){
return {x:10,y:20};
}
然后在调用方法时
const {x,y} = multiReturnValues();
console.log(x) ---> 10
console.log(y) ---> 20
你可以使用Object
function newCodes(){
var obj= new Object();
obj.dCodes = fg.codecsCodes.rs;
obj.dCodes2 = fg.codecsCodes2.rs;
return obj;
}