- ベストアンサー
関数の呼び出しかた
こんばんは。 最近javascriptを始めたのですが一つどうしても 分からない事があり質問させて頂きました。 ユーザー関数の呼び出しの方法なのですが、 入門書で勉強中に関数の呼び出しは、たとえば msgtest関数を定義していたとして msgtest(); として呼び出すのが基本だと考えたのですが ウィンドウを常に前面に出すサンプルスクリプト 中、window.onblur = msgtest; という風に引数のカッコなしで呼び出しており、 カッコをつけると動作しないという事が 起こりました。理由がわからず困っています。 何故この際引数のカッコをつけてはいけないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
JavaScriptは詳しくないので、はずしているかもしれませんが、 Cなんかでも同様の記述があるので・・ 通常関数を呼び出す(実行する)場合は、 関数名+括弧+引数の記述になります。(質問内容の前半の通り) で、括弧なしでの記述は、関数をそのとき実行するのではなく、 「関数そのもの」を何かに渡すために書いたりします。 (C言語でいえば、関数ポインタ) つまり質問の例では、window.onblurというイベントにイベント発生時の処理関数として、 msgtest関数を登録しているはずです。(イベントハンドラ) この場合、msgtest関数が実行されるのは、登録時ではなく、このイベントが発生したときです。 一方 window.onblur = msgtest() の場合は、msgtest関数の実行結果(関数の戻り値)をイベントハンドラとして登録しようとします。 これも一概にエラーという訳ではないですが、msgtest関数の戻り値がなにかの「関数そのもの」でないと、 どこかでエラーになります。 (凝ったプログラムではこう記述する場合もあるでしょう)
その他の回答 (1)
- Seiryo
- ベストアンサー率13% (27/203)
文法上の理由からだとおもいますけど・・ vrrdoeie?
お礼
なるほど!イメージ的に理解できました。 ありがとうございます。 またお願いいたします。