ready()是否异步执行



这是一个常见的习语:

<html>
<head>
<script>
    (function($) {
        $(document).ready(function(){ 
            // some jQuery/JavaScript in here
        }
    })(jQuery);
</script>
</head>
....

因此,我们使用了一个JavaScript即时函数来执行一些jQuery。现在,通常建议将JavaScript放在页面的末尾,以便进行渐进式渲染。我的问题是:

  1. 如果你在头脑中使用JavaScript,如果你让函数立即执行,会有什么不同
  2. ${document).ready(...)会阻止执行,还是异步执行
  1. 它确保在IIFE内部,$ === jQuery。在这个脚本excert之前,您可以包含其他库(如Prototype),它们有自己的$定义。

    <script src="/jquery.js"></script>
    <script src="/Prototype.js"></script>
    <script>
        $(document).ready(function () { // error, $ is something to do with prototye
        });
    </script>
    <script>
        (function ($) {
            $(document).ready(function () { // this works fine
            });
        }(jQuery));
    </script>
    
  2. 阻止执行的不是$(document).ready(),而是远程脚本的下载。

    <script src="/jquery.js"></script> <!-- page is blocked whilst jQuery is downloaded -->
    <script> // This doesn't block the page load
        $(document).ready(function () {
        });
    </script>
    

此外,我不认为这是一个常见的习语。这在创建插件时很常见,但不适用于封装$(document).ready()。以下是为此创建的,具有相同的影响;

jQuery(document).ready(function ($) { // "jQuery is always passed as first param, alias with `$`
    // Inside here, $ === jQuery
});

IIRC,当文档加载完成时,它将被触发,并且不会阻止任何其他执行。

最新更新