5

匿名関数を作成してすぐに呼び出したいのですが。

1)これにより構文エラーが発生します。なんで?

function ()
{
    alert("hello");
}();

2)関数定義を()でラップすると、機能します。

(function ()
{
    alert("hello");
})();

3)または、無名関数を変数に割り当てます。できます。

var dummy = function()
{
    alert("hello");
}();

なぜ最初の方法が機能しないのですか?

4

1 に答える 1

12

ECMAScript言語仕様のセクション12.4には、次のように書かれています。

ExpressionStatementは、FunctionDeclarationfunctionであいまいになる可能性があるため、キーワードで 開始できません。

したがって、ケース1は、言語のあいまいさにつながる可能性があるため、許可されません。他のケースは、これが問題ではないさまざまな種類のステートメント(ExpressionStatementではない)であるため、そこで構成が許可されます。

于 2009-03-22T07:26:42.133 に答える