如何删除函数的第一个参数?

时间:2016-07-06 12:38:46

标签: javascript arguments

如果我有一个函数,我可以使用arguments变量转发所有参数。

现在我有一个函数需要一个(第一个)参数为自己,并且应该只转发其余的。

例如:

var calledFunction = function(num){
    //do something with num
    //remove num from the arguments
    forwardFunction(arguments);
}

我已经尝试arguments.shift();但是参数只是一个“类似于数组的对象”,因此不知道shift()函数。

如何从参数中删除第一个参数并转发其余一系列参数?

3 个答案:

答案 0 :(得分:5)

在ES6中,写这个的惯用方法是

var calledFunction = function(num, ...args) {
  //do something with num
  forwardFunction(...args);
}

答案 1 :(得分:3)

如果您想使用其他功能,可以使用.slice()

    forwardFunction([].slice.call(arguments, 1));

现在,它将数组传递给" forwardFunction"。如果你想将除第一个之外的所有参数作为不同的单独参数传递,那么你必须使用.apply()

    forwardFunction.apply(undefined, [].slice.call(arguments, 1));

对于需要在调用另一个函数时使用其参数的频繁使用的函数,小心使用简单的循环将参数复制到数组中会更好:

    var a = [];
    for (var i = 1; i < arguments.length; ++i)
      a[i] = arguments[i];
    forwardFunction(a); // or forwardFunction.apply(null, a);

(注意该循环跳过第一个参数。)如果arguments对象作为参数传递给另一个函数,则通常无法优化调用函数。有时这不是什么大不了的事,但知道它的时间是很重要的。

另见sdgluck答案中的解构分配方法。我不知道这是否会导致优化问题;我对此表示怀疑,但后来我不确定ES2015代码在世界优化运行时系统中的成熟程度。

答案 2 :(得分:1)

ES5:

forwardFunction(Array.prototype.slice.call(arguments, 1));

ES6:

forwardFunction([...arguments].slice(1));