• ベストアンサー

関数の呼び出しかた

こんばんは。 最近javascriptを始めたのですが一つどうしても 分からない事があり質問させて頂きました。 ユーザー関数の呼び出しの方法なのですが、 入門書で勉強中に関数の呼び出しは、たとえば msgtest関数を定義していたとして  msgtest(); として呼び出すのが基本だと考えたのですが ウィンドウを常に前面に出すサンプルスクリプト 中、window.onblur = msgtest; という風に引数のカッコなしで呼び出しており、 カッコをつけると動作しないという事が 起こりました。理由がわからず困っています。 何故この際引数のカッコをつけてはいけないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

JavaScriptは詳しくないので、はずしているかもしれませんが、 Cなんかでも同様の記述があるので・・ 通常関数を呼び出す(実行する)場合は、 関数名+括弧+引数の記述になります。(質問内容の前半の通り) で、括弧なしでの記述は、関数をそのとき実行するのではなく、 「関数そのもの」を何かに渡すために書いたりします。 (C言語でいえば、関数ポインタ) つまり質問の例では、window.onblurというイベントにイベント発生時の処理関数として、 msgtest関数を登録しているはずです。(イベントハンドラ) この場合、msgtest関数が実行されるのは、登録時ではなく、このイベントが発生したときです。 一方 window.onblur = msgtest() の場合は、msgtest関数の実行結果(関数の戻り値)をイベントハンドラとして登録しようとします。 これも一概にエラーという訳ではないですが、msgtest関数の戻り値がなにかの「関数そのもの」でないと、 どこかでエラーになります。 (凝ったプログラムではこう記述する場合もあるでしょう)

riruriruriru
質問者

お礼

なるほど!イメージ的に理解できました。 ありがとうございます。 またお願いいたします。

その他の回答 (1)

  • Seiryo
  • ベストアンサー率13% (27/203)
回答No.1

文法上の理由からだとおもいますけど・・ vrrdoeie?

関連するQ&A