The 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.
See also When do I use parenthesis and when do I not?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…