天使と悪魔選手権

こんばんは。
最近javascriptを始めたのですが一つどうしても
分からない事があり質問させて頂きました。

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

A 回答 (2件)

JavaScriptは詳しくないので、はずしているかもしれませんが、


Cなんかでも同様の記述があるので・・

通常関数を呼び出す(実行する)場合は、
関数名+括弧+引数の記述になります。(質問内容の前半の通り)
で、括弧なしでの記述は、関数をそのとき実行するのではなく、
「関数そのもの」を何かに渡すために書いたりします。
(C言語でいえば、関数ポインタ)

つまり質問の例では、window.onblurというイベントにイベント発生時の処理関数として、
msgtest関数を登録しているはずです。(イベントハンドラ)
この場合、msgtest関数が実行されるのは、登録時ではなく、このイベントが発生したときです。

一方 window.onblur = msgtest()
の場合は、msgtest関数の実行結果(関数の戻り値)をイベントハンドラとして登録しようとします。
これも一概にエラーという訳ではないですが、msgtest関数の戻り値がなにかの「関数そのもの」でないと、
どこかでエラーになります。
(凝ったプログラムではこう記述する場合もあるでしょう)
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/07/05 11:39

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報