Javascript Jquery初始化混乱
现在,不管出于什么原因,原始作者在初始化时做了一些我不太明白的事情。在我看来,有一个代码是多余的:Javascript Jquery初始化混乱,javascript,jquery,Javascript,Jquery,现在,不管出于什么原因,原始作者在初始化时做了一些我不太明白的事情。在我看来,有一个代码是多余的: if (document.addEventListener) { document.addEventListener('DOMContentLoaded', init, false); } (function() { /*@cc_on try
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', init, false);
}
(function() {
/*@cc_on
try {
document.body.doScroll('up');
return init();
} catch(e) {}
/*@if (false) @*/
if (/loaded|complete/.test(document.readyState)) return init();
/*@end @*/
if (!init.done) setTimeout(arguments.callee, 30);
})();
if (window.addEventListener) {
window.addEventListener('load', init, false);
} else if (window.attachEvent) {
window.attachEvent('onload', init);
}
function init()
{
if (arguments.callee.done) return;
arguments.callee.done = true;
// do your thing
//[...]
}
这样做的目的可能是什么?还是毫无意义?代码正在确保调用
init()
函数
它将init函数绑定到加载DOM或页面时触发的事件侦听器
如果readyState已经触发了这些事件,那么它将直接调用init,否则它将每隔30毫秒检查一次readyState
// Call init function when DOM is loaded
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', init, false);
}
// Immediately invoked function expression that calls init
// function if doScroll method does not throw error.
(function() {
try {
document.body.doScroll('up');
return init();
} catch(e) {}
// Call init function if DOMContentLoaded event has already been
// fired or if page is already loaded.
if (/loaded|complete/.test(document.readyState)) return init();
// arguments.callee is a reference to it's executing function
// which is this immediately invoked function expression.
// It will keep calling it every 30 milliseconds while init
// has not been called yet.
if (!init.done) setTimeout(arguments.callee, 30);
})();
// Call init function when window is loaded.
// `load` event is fired after DOMContentReady, when
// everything has loaded in the page.
if (window.addEventListener) {
window.addEventListener('load', init, false);
// Same as above but for IE versions 8 or less
} else if (window.attachEvent) {
window.attachEvent('onload', init);
}
function init() {
// If init has been called then immediately return.
if (arguments.callee.done) return;
// Set flag on itself to indicate that it init been called.
arguments.callee.done = true;
// do your thing
//[...]
}
作者真正关心的是当页面在延迟/旧浏览器(internet explorer、蹩脚的移动浏览器等)中加载完毕后,函数init()没有被调用,因为您提到了jQuery,所有这些都将由
$(document.ready(init)处理代码>我在代码中没有看到jQuery。@gabykag.Petrioli不在InternetExplorer7中,InternetExplorer7是XP@J.Titus同意,此代码中没有jQuery:oThank you。$(document).ready(init)有什么好处吗代码>?或者这是因为其他原因而在jQuery被添加到项目中之前发生的?jQuery提供了跨浏览器兼容性的抽象。这个答案解释了$(document).ready()