Javascript:从不同的函数返回多个值

时间:2017-01-19 09:33:14

标签: javascript

我试图从不同的函数返回多个值。 起点是二维数组。代码的一个例子是:

var items = [[0,1],[1,2],[0,2]];
var a;
var b;

function first() {
a = items[Math.floor(Math.random() * items.length)];
return a;
}

function second() {
b = a[Math.floor(Math.random() * 2)];
return b;
}

function third (){
  first();
  second();
}

third();

如果我在函数之外编写代码,一切正常。当我使用函数并用console.log替换return时,它可以工作。如果我使用函数并返回(如上面报告的代码),它给我未定义。我找不到解决方案。为什么代码不起作用?

提前致谢

3 个答案:

答案 0 :(得分:2)

如果要声明变量a和b外部函数(比如在代码中),则不需要返回值。 a和b将被定义。 但是如果你没有在外面声明它,那么将返回值存储在数组变量中。

var items = [[0,1],[1,2],[0,2]];

function first() {
a = items[Math.floor(Math.random() * items.length)];
return a;
}

function second() {
b = a[Math.floor(Math.random() * 2)];
return b;
}

function third (){
var a = first();
var b = second();
var arr  = [];
arr.push(a);
arr.push(b);
return arr 
}

var t = third();
console.log(t[0], t[1]);

答案 1 :(得分:1)

如果您希望第三个返回值,请在其中添加一个返回值。

json.children.forEach(myFunc, json);

function myFunc(element, index) {
    if (index === 0) {
        element.labelEdge = this.label + 'Left';
    } else {
        element.labelEdge = this.label + 'Right';
    }
}

答案 2 :(得分:1)

也许你想要像

这样的东西
function third (){
  return {a: first(), b: second()};
}

然后

var t = third()
console.log(t.a, t.b)

或者如果你在ES6上运行

var {a,b} = third()
console.log(a, b)

有关详细信息,请参阅解构分配