8

ソース行がオブジェクトのみであるスクリプトを実行しようとすると、次のようになります。

{prop:'value'}

正常に解析されます(V8とUglifyJSの両方で)。同様に、文字列または数値をソースコードとして単独で配置でき、構文エラーは報告されません。

ただし、V8とUglifyJSはどちらも、これについて独自に不満を持っています。

function(){}

取得しUncaught SyntaxError: Unexpected token (ます。

最初の例のオブジェクトに問題がないのに、なぜこれが壊れるのでしょうか。関数はjavascriptのオブジェクトだけではありませんか?

匿名関数を実行せずに宣言しても何も起こらないことに気づきました。それは問題ではありません。なぜ解析エラーが発生するのか知りたいのですが。

4

2 に答える 2

11

ECMAScript仕様、式ステートメントのセクション12.4から:

ExpressionStatementは、 Blockであいまいになる可能性があるため、最初の中括弧で開始できないことに注意してください。また、ExpressionStatementは、 FunctionDeclarationfunctionであいまいになる可能性があるため、キーワードで開始することはできません。

関数は単なるオブジェクトですが、式でオブジェクトを実際に使用しなくても、関数を独自に宣言できることを忘れないでください。そこに曖昧さがあります。確かに、無名関数を単独で宣言することはできません(とにかく参照できないため)が、無名関数と名前付き関数の宣言を区別する仕様には何も見つからないため、これは疑わしいです両方に適用されます。

あいまいさを解決するには、かっこで囲む必要があるため、常に式として扱われます。

(function(){})
于 2012-09-08T09:56:15.120 に答える
5

{prop:'value'}オブジェクトとして解析されるのではなく、ラベルを持つブロックとして解析されるだけですprop

()式として解析するには、それを囲む必要があります。

({prop: 'value'})オブジェクト式として解析されます。

(function(){})関数式として解析されます。

于 2012-09-08T09:56:29.617 に答える