今回は第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 戻る |