繁体   English   中英

有人可以解释这个Javascript代码吗?

[英]Can someone explain this Javascript code?

我试图了解此代码的工作方式。 我终于发现这是一个循环。 它不是一个“ while”或“ for”循环,但是仍然是一个循环,因为我认为自己调用了它(如果我错了,请纠正我)。

我了解它的主要功能:加载jQuery时,将JQuery加载到我的'foo'函数时传递。 为此,它将在Window检查jQuery,如果不存在,它将重置timer() 那就是循环。 我明白了。

让我解释一下我不了解的内容:

  1. 调用: CheckDependency.Deferred.execute(foo);
    • 为什么使用“延迟”关键字?
    • execute让我感到困惑:我希望如果我调用CheckDependency.Deferred.execute ,它将只会执行该方法。 为什么它明显运行计时器功能。 为什么不能在timer()之后简单地包含该代码,因为它一直在那儿循环然后返回jquery?
  2. 说到回报。 为什么那里有一种方法? 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM