0

jQuery では、次のように、さまざまなページやその他のイベントに対して複数の呼び出しを行うことができます。

$(document).ready(function() {

また、途中で複数の「準備完了」関数定義を追加できます。1 つだけに限定されるわけではありません。もちろん、これは、コードが使用されている場所の近くでコードを定義しておくことで役立ちます。

私の質問は、document.ready関数宣言の 1 つで を使用してローカル変数を宣言した場合、ページでも使用されているvar別のdocument.ready関数宣言で使用できるでしょうか?

このような状況で jQuery がどのように機能するかはわかりません。さまざまな関数のスコープを何らかの形で織り交ぜるか、または ready イベントが発生したときにそれらの関数のそれぞれがスタンドアロンの方法で実行され、それぞれが他の変数について何も知らないかどうか。(私は2番目だと思います。)

4

2 に答える 2

7

私の質問は、document.ready関数宣言の 1 つで を使用してローカル変数を宣言した場合、ページでも使用されているvar別のdocument.ready関数宣言で使用できるでしょうか?

いいえ、それらは に渡す関数のローカル変数ですdocument.ready

このような状況で jQuery がどのように機能するかはわかりません。さまざまな関数のスコープを何らかの形で織り交ぜるか、または ready イベントが発生したときにそれらの関数のそれぞれがスタンドアロンの方法で実行され、それぞれが他の変数について何も知らないかどうか。(私は2番目だと思います。)

そして、あなたは正しいでしょう。:-) 実際、jQueryは関数の実行コンテキストを混在させることはできません。それらは JavaScript エンジンによって管理されます。

ただし、それらすべてをコンテナー関数に入れることで、それらすべてを親実行コンテキストを共有することができます。

(function() {
    // Shared by all functions within this block
    var foo = 42;

    // ...

    $(document).ready(function() {
        if (foo === 42) {
            // ...
            --foo;
        }
    });

    // ...

    $(document).ready(function() {
        if (foo > 0) {
            // ...
            --foo;
        }
    });

})();

ライブラリを作成している場合を除き、複数のready(または実際には 1 つでも) ハンドラーを使用することはお勧めしません。しかし、それは別のトピックです。

于 2012-11-08T15:53:09.217 に答える
2

いいえ、そうではありません。それぞれ$(document).readyが独自のスコープを定義します。両方に見えるものが必要な場合は、それをグローバルにするか、$(document).ready別のクロージャー内ですべてを定義できます (たとえば、自己呼び出し関数を使用)。

于 2012-11-08T15:55:42.763 に答える