可以说我有以下代码:
此示例有效
...
.filter(([,second]) => console.log(second))
这不是
...
.filter([,second] => console.log(second))
为什么我们必须将数组销毁括在括号中?不是样板吗?
答案 0 :(得分:3)
这正是ES2015
规范所规定的行为。 ()
仅在参数列表只是单个简单参数时是可选的。
从spec
ArrowFunction[In, Yield] : ArrowParameters[?Yield] [no LineTerminator here] => ConciseBody[?In] ArrowParameters[Yield] : BindingIdentifier[?Yield] CoverParenthesizedExpressionAndArrowParameterList
因此arrow参数可以是绑定标识符或CoverParenthesizedExpressionAndArrowParameterList
CoverParenthesizedExpressionAndArrowParameterList
是常规参数列表(如here所示)
CoverParenthesizedExpressionAndArrowParameterList[Yield] : ( Expression[In, ?Yield] ) ( ) ( ... BindingIdentifier[?Yield] ) ( Expression[In, ?Yield] , ... BindingIdentifier[?Yield] )
因此,我们可以编写一个简单参数的情况是BindingIdentifier
情况,如here所示,它只是一个简单的标识符,因此您不能使用解构模式:>
BindingIdentifier[Yield] :Identifier