Javascript 在括号中指定参数与不指定参数有什么区别?

Javascript 在括号中指定参数与不指定参数有什么区别?,javascript,ecmascript-6,Javascript,Ecmascript 6,我想知道使用括号()括起的参数调用.filter()与使用不带括号()的参数调用.filter()之间的区别,如下例所示: this._notifications.filter((notif) => {}) this._notifications.filter(notif => {}) 其实根本没有区别。当只有一个参数要传递给arrow函数时,删除括号只是一种语法上的甜点。但是,当有多个参数要传递时,必须插入括号。此外,这个问题不仅与.filter方法相关,而且与

我想知道使用括号()括起的参数调用.filter()与使用不带括号()的参数调用.filter()之间的区别,如下例所示:

    this._notifications.filter((notif) => {})

    this._notifications.filter(notif => {})

其实根本没有区别。当只有一个参数要传递给arrow函数时,删除括号只是一种语法上的甜点。但是,当有多个参数要传递时,必须插入括号。此外,这个问题不仅与
.filter
方法相关,而且与JS中任何对象的任何方法相关,该对象将回调函数作为参数,或者甚至在为JS变量分配一些箭头函数时,如:

var a = (b) => console.log(b);
同:

var a = b => console.log(b);

没有区别,只是偏好而已。。只要只有一个论点,这两种方法都可以。。但是如果不止一个。。你需要用这样的括号把它围起来:

this._notifications.filter((notif, someProps) => {}

作为一项规则,我的老师总是告诉我用括号括起来,即使它只有一个arg。。所以,归根结底是偏好。希望这有帮助

TLDR;如果只传递一个参数,则没有区别。当传递了多个参数(或未传递任何参数)时,请使用PARAN

引用规范中的相关部分:

  ArrowFunction[In, Yield] :
    ArrowParameters[?Yield] [no LineTerminator here] => ConciseBody[?In]
  ArrowParameters[Yield] :
    BindingIdentifier[?Yield]
    CoverParenthesizedExpressionAndArrowParameterList[?Yield]
其中
cover括号内的表达式和箭头参数列表

  CoverParenthesizedExpressionAndArrowParameterList[Yield] :
    ( Expression[In, ?Yield] )
    ( )
    ( ... BindingIdentifier[?Yield] )
    ( Expression[In, ?Yield] , ... BindingIdentifier[?Yield] )

因此,您可以看到,just
BindingIdentifier
coverinspectedexpressionandrrowParameterList
(这是parans的语法)都是完全有效的语法。第一个是指单个参数的情况,第二个是指传递多个参数或不传递任何参数的情况。

如果只有一个参数,则不需要括号。如果您有多个参数,则需要它们。实际上没有,但是如果语法需要,您可能会被迫使用括号。
如果您有多个
或少于一个,则需要它们:p-正好是一个(简单)参数,而且您不需要
()
…顺便说一下,查阅向上箭头函数文档,了解您正在谈论的内容的完整摘要about@JaromandaX是的,如果我因为懒惰而没有任何参数,那么我通常只使用
\u=>
,因此我省略了^^。。。或少于1支。作出更改:)