読者です 読者をやめる 読者になる 読者になる

カンマ演算子と VariableDeclarationList

JavaScript ECMAScript

不思議だった

ECMAScript 3 で僕がずっと不思議に思っていたことが今日 kzys 先生に教えてもらって解決したので書き留めます。

var i=0,j=0,k=0;

よくこういう書き方をしますよね。僕はこのカンマをずっとカンマ演算子のカンマだと思って、カンマ演算子だとすると Expression を左から単に解釈していくだけなので、複数行にばらすと

var i=0;
j=0;
k=0;

になってしまい、 j と k は var されない(レキシカルにならない)ことになってしまいます。

が、実はこのカンマってカンマ演算子のカンマじゃなくて、 VariableDeclarationList のカンマなんですよね!

仕様によればこうです。

VariableStatement :
    var VariableDeclarationList ;

VariableDeclarationList :
    VariableDeclaration 
    VariableDeclarationList , VariableDeclaration

いやー、知らなかった。だから全部 AssignmentExpression じゃなくて VariableDeclaration なんですね。知っ得まる得!