javascript tips #0

Javascriptでプログラム書いててはまったので、忘れないようにメモ。「関数を呼び出すときは引数なしでも()をつけること!」

perlでは引数なしの場合には()を省略しても、特に動作は変わらないのですが、Javascriptでは動作が変わってしまいます。基礎中の基礎だと思いますが、だからこそはまりやすいと思うので、注意が必要かと。

たとえば、以下の様な単純な関数が定義されているとします。

function func(){
  return 'test';
}

で、こいつを以下の様に()つきで呼び出します。

var str = func();

すると、変数strには期待通りtestという文字列がセットされます。つぎに、()なしで呼び出してみます。

var str = func;

すると、変数strには関数の定義全部が入ってしまいます。つまり、alert(str)とかすると、以下の内容が表示されます。

function func(){
  return 'test';
}

なんでこんな動作になるのかというと、()なしの場合には、関数が実行されずに、関数のリファレンスが渡される、ということらしいです。

俺みたいに普段perlを使っていて、引数なしの場合には()なしで関数呼び出している様な方は、ご注意下さい。「そんなんではまるマヌケはオマエだけだよ」とか言われるかもしれませんが、こういう基本的な部分の方が、見落としていることが多いですし、はまると原因が特定しづらいんですよね。

Javascript、基礎からちゃんと勉強しなおそう…