javascript 無名関数と初期実行

後期授業で javascript を教えることになったので、 自分なりに理解できてないところをおさらいしてみたりする。 実はこれまで授業で javascript を教えたことがなかった。 java ならあるが。 というか、javascriptjava より劣った言語だから使うべきではないなどと長い間考えており、 javascript になにか嫌悪感を抱いていたのだった。 まあそんなことはいまさらどうでも良いか。

で、ページが読み込まれたときに、 javascript のある関数を実行するには body タグに

[html] <body onload="initialize()"> [/html]

などと書きましょう、と、割と古い文献には書いてあり、 [javascript] window.onload = function() { initialize(); } [/javascript] と書くとbodyタグの記述を上書きできるとあるが、 単に

[javascript] (function() { initialize(); })(); [/javascript]

などと書かれていることもある。 これがよくわからない。 なぜ無名関数を実行させるなどということをやるのか。 そのまま [javascript] initialize(); [/javascript]

と書いてはならないのか。 いや、もしかしたらほんとは書いても良いのかもしれない。 作法の問題なのかもしれない。

jQuery だともう少しお上品に

[javascript] $(document).ready(function() { initialize(); }); [/javascript]

と書くことができる。精神衛生に良い。 しかし、

[javascript] $(document).ready(initialize); [/javascript]

と書くこともできそうな気がする。 また、

[javascript] $().ready(function(){ initialize(); }); [/javascript]

[javascript] $(function(){ initialize(); }); [/javascript]

などと書いても同じだと言う。 ひょっとすると

[javascript] $(initialize); [/javascript]

などと書いても動くんじゃないかという邪悪な想念にとらわれてしまう。 やはり javascript はわけわからん。 javascript はこの、無名関数の当たりが、あまり説明もなく、 ソースコードを読むといきなりばんばん使われてたりするところが謎な感じだわな。