[英]Can someone explain this Javascript code?
我试图了解此代码的工作方式。 我终于发现这是一个循环。 它不是一个“ while”或“ for”循环,但是仍然是一个循环,因为我认为自己调用了它(如果我错了,请纠正我)。
我了解它的主要功能:加载jQuery时,将JQuery加载到我的'foo'函数时传递。 为此,它将在Window
检查jQuery,如果不存在,它将重置timer()
。 那就是循环。 我明白了。
让我解释一下我不了解的内容:
CheckDependency.Deferred.execute(foo);
execute
让我感到困惑:我希望如果我调用CheckDependency.Deferred.execute
,它将只会执行该方法。 为什么它明显运行计时器功能。 为什么不能在timer()之后简单地包含该代码,因为它一直在那儿循环然后返回jquery? CheckDependency.Deferred.execute(foo);
对我来说,就像CheckDependency.Deferred.RETURN.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
可用,传递给“ execute”的原始函数将使用window.jQuery
实例进行window.jQuery
。
我希望我做到了这一正义,也希望我的回答会有所帮助! 如果您有任何疑问,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.