为什么我们不能在数组函数参数中省略数组破坏的括号?

时间:2018-11-08 09:12:43

标签: javascript typescript

可以说我有以下代码:

  1. 此示例有效

    ...
    .filter(([,second]) => console.log(second))
    
  2. 这不是

    ...
    .filter([,second] => console.log(second))
    

为什么我们必须将数组销毁括在括号中?不是样板吗?

1 个答案:

答案 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