views:

154

answers:

1

I'd like to create an anonymous function and then invoke it immediately.

1) This will bring a syntax error. Why?

function ()
{
    alert("hello");
}();

2) wrap the function definition with () and it works.

(function ()
{
    alert("hello");
})();

3) or, assign the anonymous function to a variable. It works.

var dummy = function()
{
    alert("hello");
}();

Why the first way doesn't work?

+10  A: 

The ECMAScript Language Specification, section 12.4, says:

An ExpressionStatement cannot start with the function keyword because that might make it ambiguous with a FunctionDeclaration.

So your case 1 is not allowed, because it might lead to ambiguities in the language. The other cases are different kinds of statements (not ExpressionStatements) in which this is not a problem, so the construct is allowed there.

sth