2

これはサイトの HEAD にありますが、それが何をするのかわかりません。コンサルティング会社が残したデバッグ用の物だったのでしょうか? 手がかりをありがとう。

<script>
    (function (r) {
        _ready = {
            q: function () {
                return r;
            }
        };
        $ = function (f) {
            if (typeof f === "function") {
                r.push(arguments);
            }
            return $;
        };
        jQuery = $.ready = $;
    }([]));
</script>

参考までに、これを批判的に検討している理由は、NRelate などの他の jquery ライブラリと競合するように見えるためです。

4

4 に答える 4

7

これは確かに役立ちます

上記のリンクから、

jQueryがロードされる前にjQuery.readyコールバックをセットアップします

例えば

このように本体に jQuery があるとします。

 <div id="main">
        <script>
            $(function(){
                $("#main").prepend( "<p>Heyo!</p>" );
            });
        </script>
    </div>
    <div>...more HTML...</div>
    <script src="/js/jquery.js"></script>

jQueryが一番下にロードされており、その前にそれを使用しようとしているため、うまくいきません。

そこで、この回避策を実行します。

<head>
    <script>
        (function(a){
             _ready = {
                q: function () {
                  return r;
                }
               };

             $ = function (f) {
               if (typeof f === "function") {
                r.push(arguments);
               }
             return $;
            };

            jQuery=$.ready=$;
        }([]));
    </script>
</head>
<body>
    <div id="main">
        <script>
            $(function() {
                $( "#main" ).prepend( "<p>Heyo!</p>" );
            });
        </script>
        <div>...more HTML...</div>
    </div>
    <script src="/js/jquery.js"></script>
    <script>
        (function( i, s, q, l ) {
            for( q = window._ready.q(), l = q.length; i < l; ) {
                $.apply( this, s.call( q[ i++ ] ) );
            }
            window._ready.q = undefined;
        }( 0, Array.prototype.slice ));
    </script>
    <script src="/js/scripts.js"></script>
</body>

最初のスクリプトが行うことは、最初の引数が関数である $.ready への呼び出しの引数を配列に格納することにより、jQuery の ready 関数をエミュレートすることです。この配列は、グローバル スコープのメソッドに対してプライベート_ready.qであり、呼び出されると配列を返します。

2 番目のスクリプトは、呼び出して配列をループ処理し_ready.q()、偽の $.ready に最初に渡された引数を実際の $.ready に適用します。



PSは、空の配列が変数 name で渡される自己呼び出し関数ですrこれを参照

于 2012-05-25T21:26:45.500 に答える
3

r最後に関数に渡される空の配列になります。

完全に注釈が付けられたコピー:

//         v--- receives the [] passed in below
(function (r) {
    // Creates an implicit global variable called `_ready`
    // (or overwrites one that's already there)
    _ready = {
        // Makes `r` available via `_ready.q()` or
        // `window._ready.q()`
        q: function () {
            return r;
        }
    };
    // Creates an implicit global variable called `$`
    // (or overwrites one that's already there)
    $ = function (f) {
        if (typeof f === "function") {
            r.push(arguments);
        }
        return $;
    };

    // Creates/overwrites the global variable `jQuery` and `$.ready`
    // with the function defined above
    jQuery = $.ready = $;
}([]));
//^^-- the value passed to r

、、、およびシンボルの引き継ぎに基づいて、jQueryが実際にロードされたときに呼び出す関数の配列を作成できるように思われます。実際にそれを行うためのコードは示されていません。配列は、 (または)を介して実際に配列を使用するコードからアクセスできます。jQuery$$.ready_ready.q()window._ready.q()

そして、それを複雑で深刻なコメントが必要であると呼ぶことは(暗黙のグローバル-震え-を宣言することは言うまでもなく )控えめな表現になります。

参照:

于 2012-05-25T21:23:32.833 に答える
2

おそらくjQueryが実際にロードされる前に、呼び出されたすべてのjQuery関数(および提供されたパラメーター)のリストを作成しています。

_ready.q()jQuery が実際に読み込まれると、内容を読み取って jQuery に渡すコードが他にもあると思います。

于 2012-05-25T21:29:19.400 に答える
0

r一番下にある空の配列です[]。基本的にrは、無名関数内で使用される配列のエイリアスでありr.push、アイテムを空の配列にプッシュします

(function(){ ... })()は無名関数として定義されています。

于 2012-05-25T21:26:41.363 に答える