3

カスタム ローダーを介していくつかの JavaScript ファイルを読み込もうとしています。以前はdocument.write()すべてのファイルを書き出すために使用していましたが、jQuery を使用したいと考えています。私は間違いなく jQuery の専門家ではなく、より基本的な機能の一部しか使用していないため、Web を利用しました。さて、私は次のコードを見つけました。これは機能しますが、理解するのに少し苦労しています。コードは次のとおりです。

(function() {
    // Poll for jQuery to come into existence
    var checkReady = function(callback) {
        if (window.jQuery) {
            callback(jQuery);
        }
        else {
            window.setTimeout(function() { checkReady(callback); }, 100);
        }
    };

    // Start polling...
    checkReady(function($) {
        // Use $ here...
    });
})();

コードが jQuery が利用可能かどうかをチェックしており、そうでない場合は毎秒チェックし続けるという事実を理解しています。また、利用可能な場合、「ポーリング」の下のコードが実行されるという事実も理解しています。私が理解していないこと、そして頭を悩ませていることは、callbackパラメーター全体とcheckReady変数です。 checkReady変数と関数の両方ですか?上のセクションの関数である変数の場合、下のセクションのコードで別の関数を関連付けるにはどうすればよいでしょうか? また、コールバック パラメータは実際に何をしているのですか?

4

3 に答える 3

2

Javascript では、関数はファーストクラス5です。つまり、関数を変数に割り当て、引数として渡し、やなどの他の変数と同じように扱うことができます"foo"

ここに表示var checkReady = function(callback) { ... }されているのは、変数に割り当てられている関数ですcheckReady

ここに表示されているのは、無名関数を引数としてcheckReady(function($) { ... });checkReady が呼び出されていることです。関数内では、これはパラメーターで参照されます。匿名関数とは、名前を付けずに呼び出すことができる文字列リテラルを持つのと同じように、名前のないリテラル関数があることを意味します。関数でも同じことができます。名前を付けたり、名前のない文字通りのものとしてインラインに配置したりできます。 function($) { ... }checkReadycallback"foo"alert("foo");var str="foo"; alert(str);

ここwindow.setTimeout(function() { checkReady(callback); }, 100);に表示されているのは、100 ミリ秒で実行されるように設定されwindow.setTimeoutた匿名関数で呼び出されていることです。function() { ... }100 ミリ秒で関数が実行されます。この関数には、最初に取得しcheckReadyたのと同じcallback引数を使用した再帰呼び出しが含まれています。

それで、何をしているのcallbackですか?JQuery がロードされたことを確認した後に行う必要があるすべてを含めることを目的としています。基本的に、それはあなたのプログラムの実体です。プログラム全体を他の変数のように、頻繁にチェックして準備ができたら呼び出す別の関数に渡します。これが第一級関数の美点です。

于 2013-02-02T03:06:56.377 に答える
1

たぶん、このかわいい写真が役に立ちます

 +-----------                      +------------+
 |          |                      |            |
 |       ...v.................     V            |
 |  +- - checkReady = function(callback) - -+   |
 |  :                              |        :   |
 |  :   callback() <-execute this--+        :   |
 |  :                anon func              :   |
 |  :                                       :   |
 |  +- - - - - - - - - - - - - - - - - - - -+   |
 |  :                                       :   |
 |  :                  +----------------------->+
 |  :                  |                    :   |
 |  :                  ^                    :   |
 +<---- checkReady(callback);               :   |
 |  :   call itself, sending the same       :   |
 |  :   anonymous callback function         :   |
 |  :                                       :   |
 |  +- - - - - - - - - - - - - - - - - - - -+   |
 |                                              |
 +-calls+                                       |
        |                                       |
        ^                                       |
    checkReady(function($) {                    |
        // this anon func goes here  >----------+
    });
于 2013-02-02T03:22:42.897 に答える
0

コード

var name = function (params...) { ... statements ... };

名前のない (匿名の) 関数を作成し、それへの参照を「name」変数に入れます。このコードが「name」関数を作成しないことが重要です。「名前」には、関数への参照のみが格納されます。この参照は別の変数にコピーでき、次のようにこの別の変数を介して関数を呼び出すことができます。

var newName = name;
newName(); // invokes the function 

JavaScript 関数について詳しく知りたい場合は、これが興味深いと思うかもしれません。

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Functions

于 2013-02-02T03:12:45.353 に答える