我试图理解这段代码是如何工作的。我终于明白这是一个循环。它不是一个“while”或“for”循环,但我认为它仍然是一个循环,因为它称自己为循环(如果我错了,请纠正我)。
我理解它的主要功能:当 jQuery 加载到我的“foo”函数时,传递 JQuery。为此,它会检查 Window
中是否有 jQuery,如果不存在,则会重置 timer()
。这就是循环。我明白了。
让我解释一下我不明白的地方:
- 调用:
CheckDependency.Deferred.execute(foo);
- 为什么使用“延迟”关键字?
execute
让我困惑:我希望如果我调用CheckDependency.Deferred.execute
它只会执行该方法。为什么明明运行定时器功能呢。为什么它不能简单地在timer()之后添加该代码,因为它一直在那里循环然后返回jquery?
- 说到返回。为什么里面有方法?
CheckDependency.Deferred.execute(foo);
对我来说和CheckDependency.Deferred.RETURN.execute(foo);
(或一些类似的疯狂语句)一样疯狂
我对 JavaScript(来自 PHP)还很陌生。代码如下:
function foo(){ console.log('jQuery found!');
}
var CheckDependency = CheckDependency || { };
CheckDependency.Deferred = function ()
{
var functions = [];
var timer = function() {
if (window.jQuery) {/* && window.jQuery.ui*/
while (functions.length) {
functions.shift()(window.jQuery);
}
} else {
window.setTimeout(timer, 250);
}
};
timer();
return {
execute: function(onJQueryReady)
{
if (window.jQuery) { // && window.jQuery.ui
onJQueryReady(window.jQuery);
} else {
functions.push(onJQueryReady);
}
}
};
}();
CheckDependency.Deferred.execute(foo);
最佳答案
首先我要说的是,我不是 javascript 专家,但我有所涉猎:)我会尝试描述一下这里发生的事情。
首先,这将创建一个名为“CheckDependency”的新对象。
var CheckDependency = CheckDependency || { };
接下来,它运行一个匿名函数,并将结果存储在 CheckDependency.Deferred 中。
CheckDependency.Deferred = function ()
{
.
.
.
.
}()
匿名函数运行以下代码:
var functions = [];
var timer = function() {
if (window.jQuery) {/* && window.jQuery.ui*/
while (functions.length) {
functions.shift()(window.jQuery);
}
} else {
window.setTimeout(timer, 250);
}
};
timer();
函数代码的最后一部分返回一个新函数execute
,给出 CheckDependency.Deferred
一个函数execute
.
return {
execute: function(onJQueryReady)
{
if (window.jQuery) { // && window.jQuery.ui
onJQueryReady(window.jQuery);
} else {
functions.push(onJQueryReady);
}
}
};
最后调用这个新函数
CheckDependency.Deferred.execute(foo);
最终结果是代码启动一个后台计时器,该计时器会调用自身,直到 window.jQuery
是 true - 这意味着 jQuery
已加载。然后,函数传递给execute
被传递到此循环中,因此将 jQuery
传递一次可用时,将使用 window.jQuery
的实例调用传递给“execute”的原始函数。 .
我希望我这样做是公正的,希望我的回答对您有所帮助!如果您有任何疑问,请告诉我。
关于javascript - 有人能解释一下这段 JavaScript 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797371/