Javascriptでプログラム書いててはまったので、忘れないようにメモ。「関数を呼び出すときは引数なしでも()をつけること!」
perlでは引数なしの場合には()を省略しても、特に動作は変わらないのですが、Javascriptでは動作が変わってしまいます。基礎中の基礎だと思いますが、だからこそはまりやすいと思うので、注意が必要かと。
たとえば、以下の様な単純な関数が定義されているとします。
function func(){ return 'test'; }
で、こいつを以下の様に()つきで呼び出します。
var str = func();
すると、変数strには期待通りtestという文字列がセットされます。つぎに、()なしで呼び出してみます。
var str = func;
すると、変数strには関数の定義全部が入ってしまいます。つまり、alert(str)とかすると、以下の内容が表示されます。
function func(){ return 'test'; }
なんでこんな動作になるのかというと、()なしの場合には、関数が実行されずに、関数のリファレンスが渡される、ということらしいです。
俺みたいに普段perlを使っていて、引数なしの場合には()なしで関数呼び出している様な方は、ご注意下さい。「そんなんではまるマヌケはオマエだけだよ」とか言われるかもしれませんが、こういう基本的な部分の方が、見落としていることが多いですし、はまると原因が特定しづらいんですよね。
Javascript、基礎からちゃんと勉強しなおそう…