我试图在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;
};
当前回答
除了像其他人推荐的那样返回一个数组或对象,你还可以使用一个收集器函数(类似于在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
其他回答
我知道有两种方法: 1. 返回为数组 2. 返回为对象
下面是我找到的一个例子:
<script>
// Defining function
function divideNumbers(dividend, divisor){
var quotient = dividend / divisor;
var arr = [dividend, divisor, quotient];
return arr;
}
// Store returned value in a variable
var all = divideNumbers(10, 2);
// Displaying individual values
alert(all[0]); // 0utputs: 10
alert(all[1]); // 0utputs: 2
alert(all[2]); // 0utputs: 5
</script>
<script>
// Defining function
function divideNumbers(dividend, divisor){
var quotient = dividend / divisor;
var obj = {
dividend: dividend,
divisor: divisor,
quotient: quotient
};
return obj;
}
// Store returned value in a variable
var all = divideNumbers(10, 2);
// Displaying individual values
alert(all.dividend); // 0utputs: 10
alert(all.divisor); // 0utputs: 2
alert(all.quotient); // 0utputs: 5
</script>
你可以从ECMAScript 6开始使用数组和“解构赋值”来做到这一点。请注意,这些在旧的Javascript版本中是不可用的(也就是说,ECMAScript第三版和第五版都不可用)。
它允许你同时赋值给1+个变量:
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
你也可以使用对象解构结合属性值简写来命名对象中的返回值,并挑出你想要的:
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
顺便说一下,不要被ECMAScript允许返回1,2,....这一事实所愚弄那里真正发生的不是表面上看起来的那样。return语句中的表达式- 1,2,3 -只是一个逗号操作符,它依次应用于数值字面值(1,2,3),最终计算为其最后一个表达式- 3的值。这就是为什么return 1,2,3在功能上和return 3是一样的。
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
我并不是在这里添加新内容,而是另一种替代方法。
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
let [...val] = [dCodes,dCodes2];
return [...val];
};
除了像其他人推荐的那样返回一个数组或对象,你还可以使用一个收集器函数(类似于在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
function a(){
var d = 2;
var c = 3;
var f = 4;
return {d: d, c: c, f: f};
}
然后使用
const {d, c, f} = a();
新版本:
function a(){
var d = 2;
var c = 3;
var f = 4;
return {d, c, f}
}