我有一个值数组:
['a', 'b', 'c', 'd']
我需要将这些作为参数传递给函数:
window.myFunction('a', 'b', 'c', 'd');
如果我可以将数组/对象传递给函数,这会更容易,但是这些函数是由其他人编写的或者已经存在并且我无法更改它们 - 它们需要作为单独的参数传递,这是我需要解决的。
传递的值的数量不一致。可能是1,也可能是100。
同样,我不能影响功能。它们就是它们的样子,我总是会收到一组值来传递给它们。
我有一个值数组:
['a', 'b', 'c', 'd']
我需要将这些作为参数传递给函数:
window.myFunction('a', 'b', 'c', 'd');
如果我可以将数组/对象传递给函数,这会更容易,但是这些函数是由其他人编写的或者已经存在并且我无法更改它们 - 它们需要作为单独的参数传递,这是我需要解决的。
传递的值的数量不一致。可能是1,也可能是100。
同样,我不能影响功能。它们就是它们的样子,我总是会收到一组值来传递给它们。
使用.apply
Function 对象的方法。
window.myFunction.apply(window, ['a','b','c','d']);
该.apply
方法调用您正在调用的函数,但允许您设置函数的this
值(第一个参数)并允许您使用 Array 设置其参数(第二个参数)。
所以在这里我们保留window
了this
值,我们将数组作为单独的参数传递。Array 成员将被分发,就好像它们作为单独的参数传递一样,所以就好像你已经这样做了:
window.myFunction('a','b','c','d');
尝试
window.myFunction.apply(window, ['a', 'b', 'c', 'd']);
在 ES6 中,您可以使用扩展语法。
从文档:
扩展语法允许在预期零个或多个参数(对于函数调用)或元素(对于数组字面量)的地方扩展诸如数组表达式或字符串之类的可迭代对象,或者在零个或多个参数的地方扩展对象表达式键值对(用于对象文字)是预期的。
您的语法将是:
var array = ['a', 'b', 'c', 'd'];
myFunction(...array);
演示:
var array = ['a', 'b', 'c', 'd'];
myFunction(...array);
function myFunction(p1, p2, p3, p4) {
console.log(p1, p2, p3, p4);
}
var arr = ['a','b','c'];
function echo(x){
console.log(x)
}
function go(){
arr.map(echo);
}
<button onclick="go()">Test</button>