如何删除函数的第一个参数
How to remove the first argument of function?
如果我有一个函数,我可以用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));
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 而循环只设置php中输入字段中的第一个值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- 第一个jquery项目-在函数中使用处理程序来模块化它们
- Javascript 函数在 PHP 中的第一个 while 循环后停止
- MeteorJS-click.increment函数不起作用(您的第一个Meteor应用程序)
- 有人能理解为什么我的jquery函数上下滑动在我的第一个li标签上不能正常工作吗
- 表单只检查提交函数的第一个值
- 如何使keyup()函数只在字段中的第一个keyup上
- 函数仅适用于第一个td's、 但不是针对所有的td's
- 如果我在一个函数中返回两次,第二个会覆盖第一个吗?
- PHP变量正在更新,但javascript函数总是显示第一个值
- 第一个javascript函数调用从未执行
- 为什么当调用一个函数时,第一个this是父对象,但在随后的函数调用中,this是指窗口对象
- 第一个JavaScript函数/链接停止工作
- 使用onchange函数时,选择列表忽略第一个值,PHP, JAVASCRIPT
- 为什么split函数无法获得第一个null
- 如何在第一个 getjson 函数中的另一个 getjson 调用中使用 getjson 响应变量
- 为什么我的 .data() 函数返回 [ 而不是我的数组的第一个值
- 在函数的第一个 else 语句中,使属性等于值的确切目的是什么