我想知道用方括号()包围的参数调用.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));
答案 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] )
因此,您看到,BindingIdentifier
和CoverParenthesizedExpressionAndArrowParameterList
(parans的语法)都是完全有效的语法。第一个是指具有单个参数的情况,第二个是指何时传递多个参数或不传递任何参数。