| 今回は第50回ということで、カンマ演算子についてやります。 |
| コード |
function Main(f){
switch(f){
case 0:
var a=(b=1,b++,b);
break;
case 1:
var a=(a=2,a+1);
break;
case 2:
var a=[(b=1,b+2),2];
break;
case 3:
var a=(b=this.constructor,1);
alert(b);
break;
}
alert(a);
} |
| カンマ演算子の優先度は低く、だいたいの場合は()で括る必要があるようです。 この演算は、 2つの文を続けて実行し、得られる値を返す(左の文を実行した上で右の文を評価する) という解釈で納得できます。 Main(0)は基本的な事、Main(1)は代入する変数をダイレクトに扱うこと、 Main(2)は配列を定義する際のカンマとの区別(()で括らないと3項の配列になります)、 new Main(3)は、わかりづらいですが、カンマ文はpublicで実行されているのか、privateで実行されているのか という実験をしています。結果はprivateだと思いますが。 |
| ちなみに、カンマ文内でvarを使おうとするとエラーになります。 つまり、関数内のカンマ文内でprivateな変数を定義することは出来ないということみたいです。 なので、無名関数を使うのが無難なところ、といったところでしょうか。 |
| top 戻る |