javascript - ES6 JS 中的扩展语法如何作为函数参数工作?

标签 javascript operators spread-syntax

好的,所以我试图了解新的传播如何作为函数参数工作。想象一个具有未知数量参数的函数,并将它们全部加在一起。

let addNums = ...a => a.reduce ((a,b) => a+b);

这个功能显然是有效的。那么,我的问题是什么?这是一些观察结果,然后是我的问题:

  1. 作为函数参数/参数的扩展语法似乎旨在将值数组“扩展”为单独的参数:

根据我所做的研究,扩展语法可用于将数组传递给不接受数组作为标准参数的函数,例如Array.prototype.push(),无需使用apply :

var x = [];
var y = [1,2,3];
// where Array.push(arg1,arg2,...) requires separate arguments this is now possible:
x.push(...y);
// which 'spreads' 'y' into separate arguments: x.push (arg1,arg2,...)

但是数组传递给 push在这种情况下需要事先声明/定义(在这种情况下 y )

  • 这是通过查看函数内参数对象的长度来确认的
  • 如果我使用addNums(1,2,3,4) , arguments.length仍然 == 4。因此,该函数似乎仍然被称为 addNums(1,2,3,4)

    问题

    我的问题是我没有调用 addNums使用数组作为要处理的扩展语法的参数。我不会打电话addNums([1,2,3,...])我很难理解的行为是,似乎有一个 secret 的隐藏步骤,其中给定一个使用扩展语法作为其单个参数声明的函数:

    let x =  ...someSetOfValues => return something ;
    

    然后使用参数列表调用:

    x(1,2,3,4,...);
    

    arguments的一代对象 Array 类型的变量使用与扩展语法的函数参数相同的名称创建。

    也许这对于经验丰富的编码人员来说是显而易见或微不足道的,但在我看来,这与迄今为止提出的用例是违反直觉的,例如将值数组分布在一组未知长度的参数上

    事实上,当使用多个参数调用函数,但使用扩展语法使用单个参数定义时,我会说,而不是跨参数读取和拆分数组,扩展语法实际上类似于: Array.apply(null, arguments)var a = [arg1, arg2, ...] - **它是创造者而不是传播者**

    我的研究来源:

    特别是对问题“@void 主要用于函数调用,即如果 myFunc 接受未知数量的参数,我们可以将参数作为扩展数组的形式提供给它。如下所示: myFunc(...dynamicallyGenerateArgs) ”

    最佳答案

    经过更多研究后,我找到了所谓的“剩余参数”的引用。

    其余参数看起来像是使用 ... 扩展语法作为参数的一部分,但行为不同。事实上,它们将收集无限数量的参数/参数,然后将它们作为函数内的数组提供。

    来源:link to MDN description of 'rest' parameters

    基本上就是我首先观察到的行为!

    关于javascript - ES6 JS 中的扩展语法如何作为函数参数工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37718331/

    相关文章:

    c - += 在 Visual C 中必须是左值

    python - 算术运算符

    javascript(jquery?)和运算符不工作

    javascript - 状态为对象数组与由 id 键控的对象

    typescript - "__assign is not defined"- NativeScript 对象传播问题

    javascript - 如何将对象作为参数传播到函数?

    javascript - 关闭 Jquery 对话框之前不显示 JSF 验证错误

    javascript - Node/ExpressJS 中域及其子域的 Cookie

    javascript - Angular 2 : reference error can't find variable require

    javascript - 如何在sql中使用时间戳字符串查询日期时间戳字段