参见英文答案 >
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);
};