我有一个包含我的闭包的js文件,这个文件在jQuery之前加载,假设它无法移动。我如何传入或检查jQuery以便在闭包中使用它?
这是我到目前为止所得到的:
(function MyClosure() {
var interval = setInterval(function() {
if (typeof jQuery !== 'undefined') {
doJqueryStuff();
clearInterval(interval);
}
}, 500);
function doJqueryStuff() {
// Some stuff with jQuery.
}
})();
它确实有效,但有“更好”的方式吗?每当我使用setInterval()
这样的事情时,我总是认为自己做错了事,也就是我在500毫秒内失去时间的事实。
答案 0 :(得分:4)
您可以等待并将执行附加到window.onload
事件,假设加载窗口后加载了jQuery ...
window.onload = function() {
// do stuff with jQuery
};
答案 1 :(得分:0)
别担心 - 虽然它确实看起来很黑(至少对我和你而言)但并不坏。通常,您需要等到复杂对象初始化并且您需要执行相同的操作。最好的办法是确保脚本加载的顺序可以解决任何依赖性问题 - 但正如您所要求的那样,我们假设订单无法调整。
我建议的唯一改进:向匿名setInterval函数添加一个转义填充。这样,如果jQuery由于某种原因永远不可用,脚本可以通知用户并停止检查。
var checkCount = 0;
var interval = setInterval(function() {
if (checkCount++ > 20) {
alert("jQuery could not be loaded - degrading user experience");
clearInterval(interval);
}
if (typeof jQuery !== 'undefined') {
doJqueryStuff();
clearInterval(interval);
}
}, 500);
答案 2 :(得分:0)
等待脚本标记上的onload事件。在这种情况下,doJqueryStuff应该是一个全局函数。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" onload='doJqueryStuff()'></script>