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()
,而不仅仅是评估它。