Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个伪jquery函数(r)脚本做什么?_Javascript_Jquery - Fatal编程技术网

Javascript 这个伪jquery函数(r)脚本做什么?

Javascript 这个伪jquery函数(r)脚本做什么?,javascript,jquery,Javascript,Jquery,我们在网站的头部有这个,我们不确定它是做什么的。这可能是咨询公司遗留下来的调试问题?谢谢你提供的线索 <script> (function (r) { _ready = { q: function () { return r; } }; $ = function (f) { if (typeof f === "function

我们在网站的头部有这个,我们不确定它是做什么的。这可能是咨询公司遗留下来的调试问题?谢谢你提供的线索

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

(功能(r){
_就绪={
q:函数(){
返回r;
}
};
$=函数(f){
if(f的类型==“函数”){
r、 推送(参数);
}
返回美元;
};
jQuery=$.ready=$;
}([]));

仅供参考,我们对此进行批判性研究的原因是,它似乎与其他一些jquery库(如NRelate)冲突。

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
符号来调用。实际执行未显示的代码。通过
\u ready.q()
(或
窗口。\u ready.q()
)可以访问该数组

把它称为复杂的,需要认真的评论(更不用说宣布隐含的全球颤栗)是一种轻描淡写的说法

另见:


r
是位于底部的空数组
[]
,基本上
r
是数组的别名,将在匿名函数中使用,例如
r。push
将项目推入空数组

(function(){…})(
被定义为匿名函数。

肯定会有帮助

从上面给出的链接

它在加载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>

$(函数(){
$(“#main”).prepend(“Heyo!

”); }); …更多HTML。。。
它不起作用,因为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>

(职能(a){
_就绪={
q:函数(){
返回r;
}
};
$=函数(f){
if(f的类型==“函数”){
r、 推送(参数);
}
返回美元;
};
jQuery=$.ready=$;
}([]));
$(函数(){
$(“#main”).prepend(“Heyo!

”); }); …更多HTML。。。 (功能(i、s、q、l){ 对于(q=window.\u ready.q(),l=q.length;i
第一个脚本所做的是模拟jQuery的ready函数,将对$.ready的任何调用的参数(其中第一个参数是函数)存储到数组中。这个数组是全局作用域的
\u ready.q
方法的私有数组,该方法在调用时返回数组

第二个脚本通过调用
\u ready.q()
在数组中循环,然后将最初传递给冒名顶替者$.ready的参数应用到实际的$.ready



P.S.这是一个自调用函数,在该函数中,通过变量名
r
传递空数组。
请参阅

它正在创建一个包含所有调用的jQuery函数(以及提供的参数)的列表,可能是在jQuery实际加载之前


我希望您会找到另一段代码,读取
\u ready.q()
的内容,并在实际加载后将其传递给jQuery。

hmm它看起来像是在连接
文档。ready
?它可能是jQuery的占位符。如果出于任何原因jQuery没有以这种方式加载,那么页面将不会生成错误。您的jQuery是从CDN加载还是从站点外部加载?我同意,它是jQuery占位符+因此,它看起来像是支持嵌入在HTML文档中间的jQuery代码。不幸的是,这意味着如果我们撕掉它,有些事情可能不起作用。是的,但我建议(如果可能的话)在你体内找到那些嵌入的代码,并在加载
jQuery.js
后放置它们。我不认为这是一个很好的练习…这只是一个解决办法。你能详细说明一下吗?我很好奇:)公平地说,如果不创建至少两个全局变量,这段代码就无法工作。@Alnitak:(我数了三个。)也许,但它们不一定是隐式的。啊,是的,我错过了
jQuery
$
的别名。谢谢你的解释。你链接到的代码很相似,但并不完全相同——不过,你已经证实了我在回答中所研究的理论@T.J.Crowder,添加了更多的代码(我在一年的访问后感觉到了你的痛楚)。是的,你找到了。但更大的问题是:这样做明智吗?这真的是最好的选择吗?@Jashwant在这个版本中,你需要调用
\u ready.q()
,而不仅仅是评估它。