我有两个功能:
function g(data, i){}
function f(data, i){}
我想称他们为:
var myVar = f(g(data, i));
因此g()
应该返回(data, i)
。
当然,它不起作用。有没有办法做到这一点?
答案 0 :(得分: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
。
答案 1 :(得分: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向您显示的对象模式(而不是数组)。
答案 2 :(得分: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来分割第一个参数的值,但是我更喜欢应用,特别是如果例如你的参数那么这很可怕是一个数组本身。
答案 3 :(得分:0)
适用于任意数量的参数长度
function g(){
return [].slice.call(arguments);
}
function f(data, i){
}
f.apply(undefined, g(data, i));