如何知道逗号是否分隔params或是箭头函数的一部分?

时间:2016-12-02 04:18:48

标签: javascript ecmascript-6 short-circuiting arrow-functions

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

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

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

对此有什么规定吗?

谢谢!

let canTry = true;
while (canTry --> false) {
    console.log(('leet hax','your mom'));
}

order of operations似乎没有帮助,因为它没有描述参数

1 个答案:

答案 0 :(得分:1)

规范定义了运算符的优先级,这就是你可以知道的。

  

12.16 - Comma Operator ( , )

Expression[In, Yield]:
    AssignmentExpression[?In, ?Yield]
    Expression[?In, ?Yield] , AssignmentExpression[?In, ?Yield]
     

14.2 - Arrow Function Definitions

ConciseBody[In]:
    [lookahead ≠ {]AssignmentExpression[?In]
    {FunctionBody}

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

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

console.log( (() => 2), 3 );
console.log( (() => 2, 3) );
console.log( () => (2, 3) );