1

我有两个功能:

function g(data, i){}
function f(data, i){}

我想这样称呼他们:

var myVar = f(g(data, i));

所以g()应该返回(data, i)

当然,它不起作用。有没有办法做到这一点?

4

4 回答 4

5

Javascript 不支持返回多个值(至少在大多数浏览器的实现中不支持)。

请执行下列操作:

function g(data, i) { 
    // some code
    return { 
        data: data,
        i: i
    };
}

var o = g(data, i);
f(o.data, o.i);

注意: 正如Phil在问题评论中提到的那样,如果i没有中修改g(),那么您可以直接调用f(g(data, i), i)而不修改function g

于 2013-10-01T04:45:29.263 回答
2

有,如果你使用apply并使你的函数返回值数组。

function g(a, b) { return [a, b]; }
function f(c, d) { return [c, d]; }
console.log(f.apply(null, g("thing", "cow")));

但是,如果用于此目的,这是一个糟糕的程序员的一个很好的标志,所以你不想这样做。如果您有带两个参数的函数,请传递两个参数:

function g(a, b) { return [a, b]; }
function f(c, d) { return [c, d]; }
var result = g("thing", "cow");
f(result[0], result[1]);

因为您已经知道它需要并生成一对值,或者使用 Der Flatulator 向您展示的对象模式(而不是数组)。

于 2013-10-01T04:47:47.953 回答
0

不完全像你拥有它,但是你可以欺骗它,因为参数是“类似数组的”......看哪:D

var g = function(a,b) {return [a,b]};
var f = function(a, b) {console.log("f evaluating", a, b)};
f.apply(null,g(1,2));

给你:

bar 1 2

或者,如果只有一个参数传入,你可以在你的 (f) 函数中做一些hacky来拆分第一个参数的值,但我更喜欢 apply ,特别是因为如果你的 a 参数是一个数组,这很可怕通过它自己。

于 2013-10-01T04:52:33.200 回答
0

适用于任意数量的参数长度

function g(){
  return [].slice.call(arguments);
}

function f(data, i){
}

f.apply(undefined, g(data, i));
于 2013-10-01T04:53:05.063 回答