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

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

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

Кто-нибудь знает, что, черт возьми, здесь происходит? Это в любом стандарте? Другие браузеры также принимают это? (Я протестировал IE 8, и он дал мне синтаксическую ошибку)

Ответы [ 2 ]

10 голосов
/ 07 мая 2011

Это не является частью стандарта. Документация на 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

1 голос
/ 07 мая 2011

Брекеты опущены, как и вы для других управляющих структур, которые принимают блок (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;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...