Синтаксис лямбда-функции в JavaScript без фигурных скобок

Я только что узнал, что следующий (удивительный) синтаксис принят Firefox

f = function(x) x+1;
f(17) //gives 18

2 ответов


Это не является частью стандарта. Документация находится на https://developer.mozilla.org/en/New_in_JavaScript_1.8#Expression_closures_%28Merge_into_own_page.2fsection%29

существует дискуссия о добавлении некоторого синтаксиса вдоль этих строк или даже короче к стандарту. См.http://wiki.ecmascript.org/doku.php?id=strawman:shorter_function_syntax


фигурные скобки опущены, как и для других структур управления, которые принимают блок (if,for). Это часть стандартного синтаксиса для них, возможно, не для функций. Думаю, можно проверить спецификацию.

соглашение заключается в том, что если фигурные скобки опущены, блок представляет собой следующий одиночный оператор (только одно заявление).

if(x) g=1;

эквивалентно

if(x){ g=1; }
обратите внимание это
if(x) g=1; f=2;

не эквивалентно

if(x){ g=1; f=2; }

это на самом деле

if(x){ g=1; } f=2;

лично я избегаю конструкции braceless, поскольку это может привести к проблемам ремонтопригодности, когда код модифицируется людьми, которые не знают, как это работает.