Why I can write
var foo = function(){}();
But can not
function(){}();
Are there are any design reasons?
See Question&Answers more detail:osWhy I can write
var foo = function(){}();
But can not
function(){}();
Are there are any design reasons?
See Question&Answers more detail:osThe first example is an assignment: the right-hand side is an expression, and the immediate execution of an anonymous function makes sense.
The second example is a declaration: once the closing "}"
is hit the declaration has ended. Parens on their own don't make sense--they must contain an expression. The trailing ")"
is an error.
Standalone declarations must be turned into expressions:
(function() {})(); // Or...
(function() {}());
The first makes the declaration an expression, then executes the result. The second turns both declaration and execution into an expression.