I\'d like to create an anonymous function and then invoke it immediately.
1) This will bring a syntax error. Why?
function ()
{
alert(\"hello\");
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.