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

How to remove the first argument of function?

本文关键字:函数 第一个 参数 删除 何删除      更新时间:2023-09-26

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

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

例如:

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

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

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

在 ES6 中,编写此内容的惯用方式是

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

如果你想使用另一个函数来做到这一点,你可以使用.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代码在世界优化运行时系统中的成熟程度。

ES5:

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

ES6:

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