0

我有一个包含我的闭包的 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 毫秒内浪费了时间。

4

3 回答 3

4

您可以等待并将您的执行附加到window.onload事件,假设在加载窗口后加载 jQuery...

window.onload = function() {
    // do stuff with jQuery
};
于 2013-04-05T16:24:52.923 回答
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);
于 2013-04-05T16:27:36.113 回答
0

等待脚本标签上的 onload 事件。在这种情况下,doJqueryStuff 应该是一个全局函数。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" onload='doJqueryStuff()'></script> 
于 2013-04-05T17:05:52.440 回答