有人可以解释这个Javascript代码吗?
Can someone explain this Javascript code?
我试图理解这段代码是如何工作的。我终于发现这是一个循环。它不是一个"while"或"for"循环,但它仍然是一个循环,因为我认为它自称(如果我错了,请纠正我)。
我知道它的主要功能是:当JQuery加载到我的"foo"函数时,当jQuery加载时,传递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
可用,传递给"execute"的原始函数将与window.jQuery
的实例一起调用。
我做到了正义,我希望我的答案有所帮助! 如果您有任何问题,请告诉我。
相关文章:
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- JavaScript代码问题:我正在将对象转换为数组
- Javascript阻止其他Javascript代码
- JavaScript代码未正确检查ajax请求
- 如何调试Javascript代码或函数
- 为什么我在这个javaScript代码中使用NaN
- 将javascript代码转换为jquery代码时出错
- 如何从Objective-C代码中调用javascript代码
- 有什么工具可以轻松读取javascript代码吗
- 这个javascript代码是如何编写的
- 如何解密此javascript代码
- SIMPLE Javascript代码,用于显示谷歌电子表格中单个字段的数据
- HTML标记,包含带引号的JavaScript代码中的引号
- 如何在Win8Metro应用程序的Javascript代码中捕获自己的C#事件
- addEventListener的Javascript代码不工作!?(单击时打开放大的img)
- JavaScript代码无法在表单上呈现部分
- 以下 JavaScript 代码与 Facebook 相关
- 使用解析为javascript源的.php,如何使用条件语句将javascript代码封装在php括号之间