javascript - Varför kan vi inte utelämna parenteser vid array-destruktion i array-funktionsparametrar?
Säg att jag har följande koder:
Det här exemplet fungerar
... .filter(([,second]) => console.log(second))Detta gör inte
... .filter([,second] => console.log(second))
Varför måste vi slå in array-förstörelse inom parentes? Är det inte standardplan?
Svar #1
Detta är precis vad ES2015-specifikationen säger att beteendet ska vara. () är endast valfria om parameterlistan bara innehåller en enda enkel parameter.
Från specifikationen
ArrowFunction[In, Yield] : ArrowParameters[?Yield] [no LineTerminator here] => ConciseBody[?In] ArrowParameters[Yield] : BindingIdentifier[?Yield] CoverParenthesizedExpressionAndArrowParameterList
Så pilparametrarna kan vara antingen en bindningsidentifierare eller en CoverParenthesizedExpressionAndArrowParameterList
Listan CoverParenthesizedExpressionAndArrowParameterList är en vanlig parameterlista (som ses här)
CoverParenthesizedExpressionAndArrowParameterList[Yield] : ( Expression[In, ?Yield] ) ( ) ( ... BindingIdentifier[?Yield] ) ( Expression[In, ?Yield] , ... BindingIdentifier[?Yield] )
Så fallet när vi kan skriva en enkel parameter är BindingIdentifier-fallet, vilket som ses här bara är ett enkelt identifierare, så du kan inte använda ett destruktureringsmönster:
BindingIdentifier[Yield] :Identifier
