ES3 と ES5 の関数式の違い

ECMAScript 3, ECMAScript 5 共に関数定義(FunctionDeclaration)と区別するために、 式文(Expression Statement)を function キーワードから始めることは出来ない。 ECMAScript 3 では関数本体(FunctionBody)に何らかのトークン(SourceElement)を挿入しなければならない。(例えば、空文)
1
think49 @think49

function fn () {}(); // ES3違反(ES5準拠)と教わった記憶があるけど、どの規則を指しているのか見つけられず…。

2012-01-02 02:56:47
think49 @think49

@think49 #ES5 12.4 Expression Statement ( http://t.co/WgofwpfD ) では「"function" で始まる式文を認めない」と読めるので混乱してる。英語を読み違えているのかなあ…。

2012-01-02 02:58:56
小倉唯 @Constellation

@think49 あってますー, ES5に於いて, functionから始まるExpressionStatementは認められていません.

2012-01-02 03:02:14
小倉唯 @Constellation

@think49 ES3違反なのはおそらく, function decl() { }ですね. FunctionBodyは1つ以上のSourceElementを含む必要があったので, function decl() { ; }じゃないとES3仕様上はSyntaxErrorでしたー.

2012-01-02 03:07:43
think49 @think49

@Constellation 合ってましたか。ということは function fn () {}(); は #ES5 でも違反ですね。

2012-01-02 03:11:14
think49 @think49

@Constellation#ES3 で FunctionBody に EmptyStatement を入れないと SyntaxError」は割とはっきり覚えていたので、この辺と記憶が混同していたのかもしれません。 深夜帯にありがとうございます。すっきりしました。

2012-01-02 03:12:26
think49 @think49

ネタ元はこちら。こちらでも記憶違いの指摘を受けたのでお礼をいおうとしたらレス数が1000になってた…。/ ECMAScript デス 3 http://t.co/O5xATaJV #ECMAScript #JavaScript

2012-01-02 03:22:36