javascript - Varför kan vi inte utelämna parenteser vid array-destruktion i array-funktionsparametrar?


Säg att jag har följande koder:

  1. Det här exemplet fungerar

    ...
    .filter(([,second]) => console.log(second))
    
  2. 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

Relaterade artiklar