3

このコードでは:

    function onHover_(){
        $('p').css('background-color', 'red') ;
    }

$( document ).ready(function() {
    //1    
    $('p').click(onHover_);
    //2
    $('p').click(onHover_());
  });

最初の行では、タグonHover_をクリックした後、(予想どおり) 関数が実行されます。<p>2 行目でonHover_()は、ドキュメントの準備ができた直後に実行されます。つまり、clickイベントを待機しません。

簡単に言えば、なぜですか?

コードをテストするためのjsFiddleを次に示します。


STOでこのスレッドを見つけましたが、結果は、受け入れられた回答が予測したものではありません。

4

5 に答える 5

3

最初のもの$('p').click(onHover_);は、関数参照をコールバックとして使用する正しい構文です。2 つ目は、ハンドラー クリックが起動されるのを待たずに関数を呼び出し、返された結果 (存在する場合) をコールバックとして使用するという誤りです。

于 2013-07-08T21:02:42.863 に答える
2

4JavaScript では、関数は、数値や文字列と同じように、渡すことができるオブジェクトです'foo'

とマークされた行では、という名前の関数をメソッド//1に渡しています。( click メソッドは、後でクリックしたときに関数を実行します)onHover_click<p>

とマークされた行では//2、(括弧で示される)という名前の関数を実行し、その実行結果をメソッドに渡しています。onHover_()click

于 2013-07-08T21:03:31.387 に答える
0

違いは、基本的に、関数がトリガーされたときです。

//1    
$('p').click(onHover_);

$('p') がクリックされたときに onHover_ 関数を実行します。

//2
$('p').click(onHover_());

関数をすぐに実行し、 $('p') をクリックすると、関数が返すものを実行しようとします。あなたの場合、それは再び $('p') であり、何もしません。

于 2013-07-08T21:15:58.427 に答える