这肯定会有所帮助
从上面给出的链接,
它在加载 jQuery 之前设置 jQuery.ready 回调
例如
假设你有 jQuery 这样的 body,
<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
方法是私有的,当被调用时,它会返回这个数组。
第二个脚本通过调用循环遍历数组_ready.q()
,然后将最初传递给冒名顶替者 $.ready 的参数应用于真正的 $.ready。
PS它是一个自调用函数,其中一个空数组与变量 name 一起传递r
。参考这个