JavaScript 第5版読んできた
昨日書き忘れたんだけど、JavaScript第5版読んできた、オライリーのあれ。3章?くらいまでをざっと見て、気になったのは二つ。ひとつめはスコープ、ふたつめは関数が定義される時点が実行前ってこと。
var scope = 'global'; function f() { alert(scope); // undefined var scope = 'local'; alert(scope); // 'local' } f();
var scope = 'global'; function f() { alert(scope); // 'global' scope = 'local'; alert(scope); // 'local' } f();
結果はコメントの通りなんだけど、一個めはundefinedで、二個めは'global'なんだよね。外側のスコープを利用するのはC的には普通なので、二個めはそれほど不自然でもない。ただ、一個めには違和感がある、宣言した時点で上書きされるわけじゃなく、変数を宣言したら関数内全体を上書きをするためこんな風になる、のかな?*1スコープが関数内全体なんだよね。C++もこうなんだっけ?C++まじめにやってないんでわからない。Cだとそもそもそんな自由に宣言できねーし。関数の先頭で宣言する←結論。
var f = 's'; function f() { /* ... */ } alert(typeof f); // string
fはfunctionの方で上書きされるのかと思いきや、違う。この関数はもう呼び出せない、のかな。f = function() { /* ... */ } てな風にすれば紛らわしくないかも。function f() {} と f = function();の違いはどれくらいあるんだろ。
もっとゆっくり読みたいなー、でも立ち読みだとあの本重いし腱鞘炎になりそうなんだよねー、かといってお金もないんだよねー、うまくいかないよねー
*1:よくわかってない、誰か説明よろ