我想调用一个函数使用数组作为参数:

const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it

function call_me (param0, param1, param2 ) {
  // ...
}

是否有更好的方法将x的内容传递给call_me()?


当前回答

您可以使用扩展语法

例如:

函数打印(…inpu) { console.log(…inpu) } Var arry = ['p0','p1','p2'] 打印(…进行)

链接如下:modzilla传播语法参考文档

其他回答

你可以在更基本的形式中使用展开运算符

[].concat(...array)

对于返回数组但希望作为参数传递的函数

例子:

function expectArguments(...args){
  return [].concat(...args);
}

JSON.stringify(expectArguments(1,2,3)) === JSON.stringify(expectArguments([1,2,3]))

注意这

function FollowMouse() {
    for(var i=0; i< arguments.length; i++) {
        arguments[i].style.top = event.clientY+"px";
        arguments[i].style.left = event.clientX+"px";
    }

};

//---------------------------

html页面

<body onmousemove="FollowMouse(d1,d2,d3)">

<p><div id="d1" style="position: absolute;">Follow1</div></p>
<div id="d2" style="position: absolute;"><p>Follow2</p></div>
<div id="d3" style="position: absolute;"><p>Follow3</p></div>


</body>

可以调用函数与任何参数

<body onmousemove="FollowMouse(d1,d2)">

or

<body onmousemove="FollowMouse(d1)">

函数参数也可以是数组:

函数foo([a,b,c], d){ console.log (a, b, c, d); } foo((1、2、3)、4)

当然也可以用spread:

函数foo(a, b, c, d){ Console.log (a, b, c, d); } foo(…[1,2,3], 4)

在使用展开运算符时,必须注意它必须是传递的最后一个或唯一一个参数。否则就会失败。

function callMe(...arr){ //valid arguments
    alert(arr);
}

function callMe(name, ...arr){ //valid arguments
    alert(arr);
}

function callMe(...arr, name){ //invalid arguments
    alert(arr);
}

如果你需要传递一个数组作为起始参数,你可以这样做:

function callMe(arr, name){
    let newArr = [...arr];
    alert(newArr);
}

正如@KaptajnKold回答的那样

var x = [ 'p0', 'p1', 'p2' ];
call_me.apply(this, x);

你也不需要为call_me函数定义每个参数。 你可以用参数

function call_me () {
    // arguments is a array consisting of params.
    // arguments[0] == 'p0',
    // arguments[1] == 'p1',
    // arguments[2] == 'p2'
}