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

时间:2018-07-13 09:15:13

标签: javascript ecmascript-6

我想知道用方括号()包围的参数调用.filter()和不使用方括号的参数调用它的区别,如下例所示:

  // Center the graph
  var initialScale = (typeof transform != 'undefined') ? transform.k : 0.75;
  svg.call(zoom.transform, d3.zoomIdentity.translate((svg.attr("width") - g.graph().width * initialScale) / 2, 20).scale(initialScale));

3 个答案:

答案 0 :(得分:3)

实际上没有任何区别。当您只有一个参数要传递给arrow函数时,删除括号是一种语法糖。但是,当您有多个参数要传递时,您必须放置括号。而且,这个问题不仅与.filter方法特别相关,而且与JS中任何将回调函数作为参数的对象的任何方法有关,甚至与将某些箭头函数分配给JS变量(例如:

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

与:

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

答案 1 :(得分:0)

没有区别,只是偏好而已。只要只有一个参数,两者都可以工作..但是如果有多个参数,则需要用如下括号括起来:

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

通常,我的老师总是告诉我用括号括起来,即使它只有1 arg ..因此,实际上归结为偏好。希望这会有所帮助!

答案 2 :(得分:0)

TLDR;如果仅传递一个参数,则没有任何区别。如果传递了多个参数(或没有传递参数),请使用parans

引用规范中的相关部分:

  ArrowFunction[In, Yield] :
    ArrowParameters[?Yield] [no LineTerminator here] => ConciseBody[?In]
  ArrowParameters[Yield] :
    BindingIdentifier[?Yield]
    CoverParenthesizedExpressionAndArrowParameterList[?Yield]

CoverParenthesizedExpressionAndArrowParameterList

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

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