3

私は JavaScript と JQuery を初めて使用するので、この例のロジックを理解するには助けが必要です: クリック イベントで div を非表示にする場合、正しい解決策は次のようになります。

$(document).ready(function() {
     $('div').click(function() {
         $('div').hide();
     });
});

しかし、私にとっては、次のように見えた方が理にかなっているでしょう。

$(document).ready() {
   $('div').click() {
       $('div').hide();    
   };
};

なぜ私がこれを混乱させるのかを誰かが理解し、私が明らかに見逃していることを説明できることを願っています.

4

7 に答える 7

3

UI プログラミングは、本質的にイベント駆動型です。

このパラダイムでは、使用する言語に関係なく、イベントが発生したときに実行されるイベント ハンドラーを定義する必要があります。あなたの例では、コンパクトではない構文を使用すると、より表現力豊かになります。

$('div').on('click', reaction);

純粋な OOP (Java など) では、反応は特定のインターフェイスを実装するオブジェクトになります。

import java.util.Observer;
public class ResponseHandler implements Observer {
  ...
}
ResponseHandler reaction = new ResponseHandler();

さあ、Javascript へようこそ!

Javascript 関数は高次であるため、関数を引数として渡すのが一般的であり、これらはcallbacksと呼ばれます。また、このコールバック関数の定義に関しては、javascript は非常に冗長です。

コールバック (名前付きまたは匿名) を定義するには、完全な関数式を使用する必要があります。または、Coffescript の化粧品に移動して、これらの関数定義をざっと読むこともできます (ただし、関数定義がとにかく存在するため、それらは単なる構文糖衣です)。

あなたが発明した {} 構文または coffescript 矢印構文は、実際には実際の反応を隠しています。

$('div').on('click', reaction);

javascript の反応は単なる関数、コールバック関数です。

現在、jQuery イベントはリアクター エンジンの実装であり、アプリケーション コードを実際のエンジンから完全に分離することができます。これは、jQuery アプリケーションがイベントに対する反応の定義のグループであることを意味します。

  • ドキュメントの準備ができたら、これを行います。
  • ユーザーがdivをクリックするたびに、それを行います。
  • マウスがスパンに入るたびに、何でもします。
于 2013-09-26T09:55:03.660 に答える
1

無名関数の理由は、ready 関数内で呼び出されるためです。このようにして、jQuery は、ready 関数に渡す関数を呼び出す前後にいくつかのアクションを実行できます。もちろん、jQuery.ready 関数はもっと複雑ですが、私が言いたいことを説明するために、次のように仮定しましょう。

jQuery.ready = function(yourAnonymusFunction) {
    // do something before ...

    // call the function you passed
    yourAnonymusFunction();

    // do something afterwards

}

あなたの構文では、実際には次のようになります。

$(document).ready = function() {
    $('div').click() {
    $('div').hide();    
};

ready 関数を上書きします。

于 2013-09-26T08:20:02.757 に答える
0

関数readyは引数として関数を取ります。関数readyが実行されると、要素の準備ができたときに実行される関数のリストにその関数を追加するだけです。これは、コールバックと呼ばれます。

したがって、コードで関数を定義し、その関数を に渡す必要があります$.readyreadyJavascriptは完全に動的であり、それ自体が関数を引数として受け入れる関数であることを知る方法がありません.現在、関数として定義しています」。

そうは言っても、これは JavaScript では非常に一般的なパターンであり、構文をより簡潔にするように多くのプレッシャーがあります。

于 2013-09-26T08:43:05.043 に答える
0

大変お世話になりました。要するに、私の誤解は、関数の呼び出しと宣言の違いを認識していなかったためです。

呼び出し:function();

宣言:function(){};

紛らわしい質問で申し訳ありませんが、これが最後の質問ではないと思います ;) 宜しくお願いします、クリストファー

于 2013-09-27T12:10:32.160 に答える