参见英文答案 >
Passing an array as a function parameter in JavaScript7个
我可以在javascript中以方便的方式调用一个有参数数组的函数吗?
我可以在javascript中以方便的方式调用一个有参数数组的函数吗?
例:
var fn = function() { console.log(arguments); } var args = [1,2,3]; fn(args);
我需要参数[1,3],就像我的数组.
解决方法
你应该使用
apply
:
var fn = function() { console.log(arguments); }; var args = [1,3]; fn.apply(null,args);
fn(1,3);
请注意,我使用null作为apply的第一个参数,将该关键字设置为fn中的全局对象(窗口).
还应该知道arguments
对象并不是一个数组,它是一个数组类对象,它包含与用于调用函数的参数相对应的数字索引,一个length属性,它给出了使用的参数数,arguments.callee
属性是对执行函数的引用(对匿名函数的递归有用).
如果要从参数对象中创建数组,可以使用Array.prototype.slice方法:
var fn = function() { var args = Array.prototype.slice.call(arguments); console.log(args); };
编辑:响应您的评论,是的,您可以使用shift方法并将其返回值设置为函数上下文(该关键字):
fn.apply(args.shift(),args);
但请记住,shift将从原始数组中删除第一个元素,并且将在没有第一个参数的情况下调用您的函数.
fn.apply(args[0],args);
var fn = function() { var args = Array.prototype.slice.call(arguments),firstArg = args.shift(); console.log(args,firstArg); };