当前位置: 首页 > 面试题库 >

是否可以向JavaScript函数发送可变数量的参数?

漆雕正奇
2023-03-14
问题内容

是否可以从数组向JavaScript函数发送可变数量的参数?

var arr = ['a','b','c']

var func = function()
{
    // debug 
    alert(arguments.length);
    //
    for(arg in arguments)
        alert(arg);
}

func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(arr); // prints 1, then 'Array'

我最近写了很多Python,能够接受并发送varargs是一个很棒的模式。例如

def func(*args):
   print len(args)
   for i in args:
       print i

func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(*arr) // prints 4 which is what I want, then 'a','b','c','d'

是否有可能在JavaScript发送待处理数组 作为 参数数组?


问题答案:

更新 :从ES6开始,您可以在调用函数时简单地使用 传播语法

func(...arr);

由于ES6还希望将参数视为数组,因此还可以在参数列表中使用传播语法,例如:

function func(...args) {
  args.forEach(arg => console.log(arg))
}

const values = ['a', 'b', 'c']
func(...values)
func(1, 2, 3)

并且可以将其与常规参数结合使用,例如,如果要分别接收前两个参数,而其余的则作为数组接收:

function func(first, second, ...theRest) {
  //...
}

也许对您有用,您可以知道一个函数需要多少个参数:

var test = function (one, two, three) {}; 
test.length == 3;

但是无论如何,您可以传递任意数量的参数…

apply与不需要this函数调用中设置值的情况相比,spread语法更短,更“甜” ,这就是方法。

这是一个应用示例,它是以前的实现方法:

var arr = ['a','b','c'];

function func() {
  console.log(this); // 'test'
  console.log(arguments.length); // 3

  for(var i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }

};

func.apply('test', arr);

如今,我只建议apply仅在需要从数组传递任意数量的参数并设置this值时使用。applytake是this值作为第一个参数,将在函数调用中使用,如果我们null在非严格代码中使用,则该this关键字将func在严格模式下使用“
use strict”显式引用内部的Global对象(窗口)或在ES模块null中使用。

还要注意,该arguments对象并不是真正的数组,可以通过以下方式将其转换:

var argsArray = Array.prototype.slice.call(arguments);

在ES6中:

const argsArray = [...arguments] // or Array.from(arguments)

但是arguments由于传播语法的原因,如今您很少直接使用该对象。



 类似资料:
  • 问题内容: 与在或中使用的方式类似: 问题答案: 是。 如果你不理会关键字参数,这很简单并且可以工作: 如你所见,Python将为你提供一个包含所有参数的元组。 对于关键字参数,你需要将其作为单独的实际参数接受,如的所示。

  • 问题内容: 很多人说评论中的要求太多,这让我犹豫不决,但是我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery,而(2)问题通常包含我不理解的技术。 我有一个函数,里面有一个变量。变量被分配了一个功能。我敢肯定,这个概念不是AJAX独有的,但这是我正在使用的上下文(如果有区别的话)。 我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我能做到吗? 问题答案:

  • 问题内容: 我希望这个问题不是太简单,但是我不知道:( 如何在函数名称中使用var启动函数? 例如 … 我的职能 启动功能 我希望有人能帮助我。 提前致谢!彼得 问题答案: 将函数存储在一个对象中,而不是使其成为顶层。 然后,您可以像访问其他任何对象一样访问它们: 您也可以直接从对象访问它们… ……并避免将它们存储在一个对象中,但这意味着应该在全局范围内进行播放。

  • 问题内容: 我知道JavaScript函数可以接受“任意”数量的参数。 但是我想知道实际上有多少个“任何”个数是否有限制? 例如,假设我向提出了一百万个论点。那行得通吗?还是口译员会翻身? 我猜测最大值是(a)特定于实现的(b),因为对象是类似数组的。 我在语言规范中没有看到这一点,但是可能没有连接点。 问题答案: 尽管没有具体限制规范中参数的理论最大数目这些限制是完全依赖于实现的,最有可能,也将

  • 问题内容: 是否可以配置GET方法以读取可变数量的URI参数并将其解释为可变参数(数组)或集合?我知道查询参数可以读取为列表/设置,但在我的情况下我无法使用它们。 例如: 提前致谢 问题答案: 如果我正确理解了您的问题,则注释可以采用正则表达式来指定路径组件列表。例如,类似: 还有一个更广泛的例子在这里。

  • 问题内容: 我有一些旧代码通过jQuery的post方法发出AJAX POST请求,看起来像这样: 只是具有一些基本字符串属性的javascript对象。 我正在移动我们的内容以使用Angular,并且我想用$ http.post代替此调用。我提出以下内容: 当我这样做时,我从服务器收到500错误响应。使用Firebug,我发现这发送了如下请求体: 成功的jQuery 发送如下内容: 我要命中的端