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()