Функция стрелки ECMAScript6, возвращающая объект

При возврате объекта из функции стрелки кажется, что необходимо использовать дополнительный набор {} и оператор return из-за двусмысленности в грамматике:

p => { return { foo: 'bar' } }

Если функция стрелки возвращает что-то еще, {} и return не нужны, например:

p => 'foo'

Есть ли что-то очевидное, что мне не хватает?

448
задан jkschneider 27 февр. '15 в 20:02
источник поделиться

3 ответов

Вы должны завернуть литерал возвращаемого объекта в круглые скобки. В противном случае фигурные скобки будут считаться обозначающими тело функций. Следующие работы:

p => ({ foo: 'bar' });

Вам не нужно вставлять какое-либо другое выражение в круглые скобки:

p => 10;
p => 'foo';
p => true;
p => [1,2,3];
p => null;
p => /^foo$/;

и так далее.

Ссылка: MDN - Возвращаемые объектные литералы

802
ответ дан alexpods 27 февр. '15 в 20:10
источник поделиться

Вы можете задаться вопросом, почему синтаксис действителен (но не работает как ожидалось):

var func = p => { foo: "bar" }

Это из-за синтаксис ярлыков JavaScript:

Итак, если вы переведёте вышеуказанный код на ES5, он должен выглядеть так:

var func = function (p) {
  foo:
  "bar"; //obviously no return here!
}
43
ответ дан Petr Odut 15 июня '16 в 12:40
источник поделиться

Если тело функции стрелки завернуто в фигурные скобки, оно не возвращается неявно. Оберните объект в круглые скобки. Это будет выглядеть примерно так.

p => ({ foo: 'bar' })

Обернув тело в parens, функция вернет { foo: 'bar }.

Надеюсь, это решит вашу проблему. Если нет, я недавно написал статью о функциях Arrow, которая более подробно описывает ее. Надеюсь, вы сочтете это полезным. Функции Javascript Arrow

7
ответ дан Paul McBride 09 авг. '17 в 11:48
источник поделиться

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