無名関数の呼び出し

JavaScriptの無名関数の実行 (function(){})() と (function(){}()) の違い」http://polygon-planet.blogspot.com/2011/12/javascript-function-function.html
を見て、なるほど。

今まで、無名関数の呼び出しは、

(function(x){alert("<<"+x+">>");})("foo");

と括弧で囲んでやっていたけど、式の文脈では、

var hoge = function(x){alert("<<"+x+">>");}("foo");
(function(x){alert("<<"+x+">>");}("foo"));
+function(x){alert("<<"+x+">>");}("foo");

のように無名関数を囲む括弧は不要。

function(x){alert("<<"+x+">>");}("foo");

がエラーになるのは、構文解析の都合か。
なお、JScriptだとこれはエラーにならない。どうも、無名関数定義が無駄に捨てられてから、うしろの括弧が評価されるようだ。