javascript – 具有数组参数的调用函数

前端之家收集整理的这篇文章主要介绍了javascript – 具有数组参数的调用函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Passing an array as a function parameter in JavaScript7个
我可以在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);
};

猜你在找的JavaScript相关文章