关于ES6 Arrow函数中`arguments`的官方信息?

时间:2015-06-19 10:01:58

标签: javascript ecmascript-6 arrow-functions

.table-row {
    display: table;
    width: 100%;
}

根据Babel(以及我可以告诉TC39的初步建议),这是“无效的”,因为箭头函数应该使用其父作用域作为参数。我能找到的唯一信息与此相矛盾的是一条评论说这被TC39拒绝,但我找不到任何支持这一点。

在这里寻找官方文档。

2 个答案:

答案 0 :(得分:40)

Chrome,FF和节点在这里似乎有误,Babel是正确的:

箭头函数在其范围内没有自己的arguments绑定;调用它们时不会创建参数对象。

  

在这里寻找官方文档

箭头函数表达式计算have their [[ThisMode]] setlexical的函数,当调用此函数时,declaration instantiation不会创建arguments object。甚至还有一个特定的注释(18a)表明“箭头函数永远不会有参数对象。”。

答案 1 :(得分:32)

如Bergi所述,箭头函数没有自己的arguments变量。

但是,如果你想捕获箭头功能的args,你只需使用rest parameter



const myFunc = (...args) =>
  console.log ("arguments", args)
  
myFunc (1, 2, 3)
// arguments [1, 2, 3]




休息参数可以与其他位置参数组合,但必须始终作为 last 参数包含



const myFunc = (a, b, c, ...rest) =>
  console.log (a, b, c, rest)

myFunc (1, 2, 3, 4, 5, 6, 7)
// 1 2 3 [ 4, 5, 6, 7 ]




如果你错误地在任何其他位置写一个rest参数,你会得到一个错误



const myFunc = (...rest, a, b, c) =>
  console.log (a, b, c, rest)
  
myFunc (1, 2, 3, 4, 5, 6, 7)
// Error: Rest parameter must be last formal parameter