1

Я бездельничал с использованием запятой в операциях короткого замыкания:Как узнать, разделяет ли запятая параметры или является частью функции стрелки?

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

The order of operations, кажется, не поможет, так как она не описывает PARAMS

+1

Спецификация ECMAScript включает в себя формальную грамматику, которая описывает, как такие вещи, как это должно быть разобрано. Я не помню точных правил, но запятые имеют тенденцию быть очень «низкоприоритетными», обычно применяя к внешним/большим группам. В этом случае запятая находится вне функции стрелки. –

+0

Вероятно, поэтому люди поощряют использование фигурных скобок со стрелочными функциями, например.() => {component.off ('something'); } – Paul

+0

@JeremyBanks Фактически внутри функции стрелки – neaumusic

ответ

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 s.

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

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

+1

поэтому ответ на вопрос ... –

+0

@JaromandaX Ответ «прочитайте руководство ***» – Oriol

+1

так, почему сообщение *** ответ - по крайней мере, отправьте *** ссылку на соответствующий ** * раздел *** руководство: p –