voidと()を試してみた

id:rokuroxさんに教えていただいたことを、試してみた。
いろいろ調べてみると、びっくりすることがたくさんあった。


いろいろ実行してみた。こんな時便利なのはFirebugのコンソール。

void(alert("hoge"))


ちゃんとAlertがでる。

void(function(){alert("hoge")})


なにもでない・・・。
これでけっこうはまっていたんだよ・・・。

void(function(){alert("hoge")}())


お、Firefoxでは特に問題なくAlertがでた。

void( (function(){alert("hoge") )()})


ちゃんとAlertがでた。

void(alert("hoge");alert("fuga");)


これはだめ。


なるほど・・・。
もうちょっと調べてみた。

void 演算子は次の方法のうち、どちらかの方法で使用します。

1. void (expression)
2. void expression

void 演算子は値を返さずに評価する式を指定します。

Core JavaScript 1.5 Guide:Operators:Special Operators - MDC

voidがOperatorだと・・・。演算子なのか・・・?

タイプ : ビルトイン関数<中略>
void(メソッドまたは数式)

void/JavaScriptリファレンス

ん、ビルトイン関数。関数なのか?まあmozillaのほうが正しいのだろう。きっと。


voidが演算子とはびっくりだ。
Javaのvoidとは大分違うんだな。Javaだと型(戻り値のない型)見たいな感じがする(調べていないけど)。

Core JavaScript 1.5 Reference:Operators:Operator Precedence - MDC を見てみると、なんと new も演算子だ。


さて、voidに戻る。
最初はvoidという関数の引数は関数なんだ。だから alert("hoge");alert("fuga"); はだめなんだと考えたが、どうやら違うみたい。
;は式の終わりを示す。だからだめなんだ。

function(){alert("hoge");alert("fuga");}

これなら1つの式だ。だからうまくいく。


あと()で実行するというところ。
これはちょっと考えればわかった。

(function(){alert("hoge");alert("fuga");})()

↑は↓と同じことなんだと思う。

func = function(){alert("hoge");alert("fuga");};
func();


JavaScript、奥が深い。
関係ないけど、プロトタイプとか全然分かっていないので、ちゃんと勉強したい。
id:rokuroxさん、とても勉強になりました。ありがとうございます!