如何知道逗号是分隔参数还是箭头函数的一部分?

nea*_*sic 3 javascript short-circuiting ecmascript-6 arrow-functions

我一直在搞乱在短路操作中使用逗号:

let component = { on: (p1, p2, p3) => console.log(p1, p2, p3) };
    component.on('something', () => console.log('what do'), '???');
Run Code Online (Sandbox Code Playgroud)

'???'是否是参数似乎不明确

这有什么规则吗?

谢谢!


操作顺序似乎没有帮助,因为它没有描述参数

Ori*_*iol 5

该规范定义了运算符的优先级,这就是您如何知道的。

\n\n
\n

12.16 - 逗号运算符 ( , )

\n\n
Expression[In, Yield]:\n    AssignmentExpression[?In, ?Yield]\n    Expression[?In, ?Yield] , AssignmentExpression[?In, ?Yield]
Run Code Online (Sandbox Code Playgroud)\n\n

14.2 - 箭头函数定义

\n\n
ConciseBody[In]:\n    [lookahead \xe2\x89\xa0 {]AssignmentExpression[?In]\n    {FunctionBody}
Run Code Online (Sandbox Code Playgroud)\n
\n\n

箭头函数的简洁主体必须是一个AssignmentExpression,它不能直接包含逗号。但逗号运算符可以分隔不同的AssignmentExpression

\n\n

如果您想清楚自己在做什么,请添加括号:

\n\n

\r\n
\r\n
Expression[In, Yield]:\n    AssignmentExpression[?In, ?Yield]\n    Expression[?In, ?Yield] , AssignmentExpression[?In, ?Yield]
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n