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?
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.
来源:https://stackoverflow.com/questions/670623/why-this-kind-of-function-invocation-is-wrong-in-javascript