美文网首页《JavaScript高级程序设计》笔记
《JavaScript高级程序设计》笔记2:在HTML中使用Ja

《JavaScript高级程序设计》笔记2:在HTML中使用Ja

作者: 梁海杰_IRV | 来源:发表于2017-08-27 15:20 被阅读0次

    参考原文:《JavaScript高级程序设计》笔记:在HTML中使用Javascript

    <script>元素

    1. 直接页面嵌入JavaScript代码
    <script type="text/javascript">
        function sayHi(){
            alert("Hi!");
        }
    </script>
    

    包含在<script>元素内部的JavaScript代码从上至下依次解释。上例,解释器解释一个函数的定义,然后把定义保存自己环境中。在解释器对<script>内部代码求值完毕以前,页面中其余内容不会被浏览器加载或显示。

    1. 包含外部JavaScript文件
    <script type="text/javascript" src="js/jquery-1.8.3.min.js">
    //注意:在带有src属性的<script>只会下载并执行外部文件,嵌入的代码会被忽略
    </script>
    

    与解析嵌入式JavaScript代码一样,解析外部JavaScript文件(包括下载该文件)时,页面的处理也会暂时停止。

    延迟脚本——defer属性

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"/>
    <title>Example HTML Page</title>
    <meta name="description" content=""/>
    <meta name="keywords" content=""/>
    <link type="text/css" rel="stylesheet" href="css/reset.css"/>
    <link type="text/css" rel="stylesheet" href="css/main.css"/>
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript" defer="defer" src="example1.js"></script>
    </head>
    <body>    
    <!--这里是内容-->
    </body>
    </html>
    

    <script>标签定义了defer属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。
      在上例中,虽然我们把<script>元素放在了文档的<head>元素中,但其中包含的脚本将延迟到浏览器遇到</html>标签后再执行。

    • <script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。
    • H5会忽略给嵌入式脚本设置的defer属性。
    • 多个延迟脚本实际中不一定按照顺序执行,最好只包含一个延迟脚本。
    • 延迟脚本放页面底部为最佳选择。(不支持defer属性的浏览器会忽略此属性,正常处理此脚本)*

    异步加载——async属性

    <script type="text/javascript" async src="example1.js"></script>
    
    • async只适用于外部脚本文件,并告诉浏览器立即下载文件,但不能保证按照指定的先后顺序执行。
    • 指定async属性的目的是不让页面等待脚本下载和执行,从而异步加载页面其他内容。因此,建议异步脚本不要再加载期间修改DOM。
    • 异步脚本一定会在页面load事件之前执行,有可能会在DOM ContentLoaded事件触发之前或之后执行。

    文档模型

    最初的俩种文档模式是:混杂模式(quirks mode)和标准模式(standards mode)。混杂模式会让IE的行为与(包含非标准特性的)IE5相同,而标准模式则让IE的行为更接近标准行为。

    如果在文档开始初没有发现文档类型声明,则所有浏览器都会默认开启混杂模式

    <noscript>元素

    包含在<noscript>元素中的内容只有在下列情况下才会显示出来:

    • 浏览器不支持脚本
    • 浏览器支持脚本,但脚本被禁用
    <body>
    <noscript>
        <p>本页面需要浏览器支持(启动)JavaScript</p>
    </noscript>
    </body>
    

    小结

    • 由于浏览器会先解析完不使用defer属性的<script>元素中的代码,然后再解析后面的内容。所以,一般把<script>元素放在页面最后—— 主要内容后面,<body>标签之前
    • defer属性——可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行(至少H5规范要求,现实不一定)。
    • async属性——可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。但是,不保证执行顺序!

    相关文章

      网友评论

        本文标题:《JavaScript高级程序设计》笔记2:在HTML中使用Ja

        本文链接:https://www.haomeiwen.com/subject/qanbdxtx.html