2

ECMAScriptを発行する小さなコンパイラを実装するには、関数オブジェクト式がどの程度強力にバインドされるか、つまり「演算子」の優先順位を知る必要があり function(a1, a2, ...) { ... }ます。

たとえば、どのよう function(a1, a2, ...) { ... } (b1, b2, ...) に解析されることになっていますか?希望する結果、つまり関数オブジェクトへのb1、b2、...の適用を取得するには、Rhinoインタープリターで関数オブジェクトを括弧で囲む必要があります。

4

2 に答える 2

4

あなたfunction(a1, a2, ...) { ... } (b1, b2, ...)は無効であり、構文エラーを返すはずです。ECMAScriptには、の概念FunctionDeclarationだけでなく、の概念もありFunctionExpressionます。以下を確認することをお勧めします。

aFunctionExpressionは演算子ですが、FunctionDeclarationは関数を宣言するために使用される特別な構文であり、囲んでいるスコープの先頭に自動的に引き上げられます。

グループ化演算子function(括弧)でaをラップすると、インタープリターはそれを。として扱うように強制されます。FunctionExpression

Firebugで次のことを試してみた場合:

function () { alert('test'); }();       // Syntax Error
(function () { alert('test'); })();     // Works fine
于 2010-10-02T11:30:25.973 に答える
0

関数リテラルを実行するには、括弧で囲む必要があります。また:

(function(...){...})(...);

また:

(function(...){...}(...));

括弧がないと、構文エラーが発生します。

于 2010-10-02T11:31:16.160 に答える