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);
};

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...