如何让JavaScript“展开”可变数量的参数?

时间:2012-06-07 07:46:46

标签: javascript

例如,假设我有以下两个函数

function a(param1) {
    console.log(param1);
}

function b(func, params) {
    func(params);
}

然后

b(a, 1);

按预期打印'1'

现在假设我有一个额外的功能

function c(param1, param2) {
    console.log(param1, param2);
}

有没有办法做类似

的事情
b(a, 1);

除了喂两个参数外?类似于以下内容

b(c, [2, 3]);

将[2,3] arrray展开为单个参数

2 个答案:

答案 0 :(得分:5)

这样的事情:

function b(func) {
    func.apply(null, [].slice.call(arguments, 1));
}

答案 1 :(得分:2)

您想使用apply函数方法。因此,在b内,使用func.apply(this, params)而不仅仅是func(params)

apply的第一个参数是将this设置为的内容;第二个参数是传递给函数的参数数组。

b.foo(1,2,3)之类的内容与假设为foo.apply(b, [1,2,3])的{​​{1}}相同。