Если я хочу вызвать такую ​​функцию:

moo({ a: 4 }); 

Обычно мне нужно сформулировать определение функции следующим образом:

 function moo(myArgObj) { print(myArgObj.a); } 

Но этот удивительный синтаксис полностью допустим в spidermonkey для определения функций:

 function moo({ a, b, c }) { // valid syntax! print(a); // prints 4 } 

Что это за функция?

Это называется разрушением . Вы можете найти больше информации в MDN: Разрушение назначения (особенно см. Распаковка полей из объектов, переданных как параметр функции ).


Обсуждение стандартов ECMAScript можно найти на их вики-странице , также интересно это сообщение в блоге на dailyjs.