Как узнать, если запятая разделяет параметры или является частью функции стрелки?

Я возился с использованием запятой в операциях короткого замыкания:

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'));
}

Порядок операций, кажется, не помогает, так как он не описывает параметры

1 ответ

Решение

Спецификация определяет приоритет операторов, вот как вы можете знать.

12.16 - Оператор запятой (,)

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

14.2 - Определения функций стрелок

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

Краткое тело функции стрелки должно быть выражением AssignmentExpression, которое не может напрямую содержать запятые. Но оператор запятой может разделять различные выражения AssignmentExpression.

Если вы хотите прояснить, что вы делаете, добавьте скобки:

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

Другие вопросы по тегам