10

I just found out that the following (awesome) syntax is accepted by Firefox

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

Does anyone know what the hell is going on here? Is this in any standard? Do other browsers also accept it? (I tested IE 8 and it gave me syntax error)

2 Answers 2

11

This isn't part of a standard. The documentation is at https://developer.mozilla.org/en/New_in_JavaScript_1.8#Expression_closures_%28Merge_into_own_page.2fsection%29

There's discussion about adding some syntax along these lines or even shorter to the standard. See http://wiki.ecmascript.org/doku.php?id=strawman:shorter_function_syntax

Sign up to request clarification or add additional context in comments.

1 Comment

The expression closures documentation link has changed to a new one.
1

The braces are being omitted, just as you can for other control structures that take a block (if,for). It's part of standard syntax for those, perhaps not for functions. One could check the spec I guess.

The convention is that if braces are omitted, the block is the following single statement (only one statement).

For example

if(x) g=1;

is equivalent to

if(x){ g=1; }

However, note that

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

is NOT equivalent to

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

it is actually

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

I avoid the braceless construct, personally, since it can lead to maintainability problems when the code is modified by people who don't know how this works.

2 Comments

Not just the braces. The return statement is omited too!
@missingno I saw that too on @Boris's link. It's a pretty handy shorthand for functions!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.