Javascript高级程序设计(三)在HTML中使用JavaScript

1.<script>元素

在HTML中插入JavaScript的主要方法,就是使用<script>元素
<script>有下列6个属性。

属性 描述
async 可选。表示应该立即下载脚本,但不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。
charset 可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少有人用。
defer 可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。IE7及更早版本对嵌入脚本也支持这个属性
language 已废弃。规定脚本语言,用type代替
src 可选。表示包含要执行代码的外部文件。
type 表示编写代码使用的脚本语言的内容类型。MIME类型

2.使用<script>元素的方式

2.1.1直接在页面中嵌入
<script type="text/javascript">
            alert("hi");
        </script>

注意:

  • 包含在<script>元素内部的Javascript代码将被从上至下一次解释,解释器会解释一个函数的定义,然后将该 定义保存在自己的环境当中。在解释器对<script>元素内部的所有代码求值完毕以前,页面中的其余内容都不会被浏览器加载或显示。
  • 在使用<script>嵌入Javascript代码的时候,记住不要在代码中任何地方出现‘</script>’字符串,浏览器会在加载时出现错误;当浏览器遇到字符串‘</script>’时,就会认为那是结束的</script>标签,可通过转义字符“\”解决这个问题
2.1.2外部Javascript文件

使用src属性,<script src=""></script>
注意:

  • 在下载和解析外部Javascript文件时,页面的处理也会暂时暂停。
  • 如果是在XHTML文档中,也可以代码结束的</script>标签,但HTML中不能,不符合HTML规范,也得不到浏览器的正确解析。
  • 带有src属性的<script>元素不应该在其<script></script>标签之间再包含额外的Javascript代码。如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码被忽略。
  • src属性可指向当前HTML页面所在域之外的某个域中的完整的URL。

3.<script>标签的位置

3.1.1放在页面的<head>元素中
<head>
        <meta charset="UTF-8">
        <title></title>
        <script src=""></script>
    </head>

这种做法的目的是把所有外部文件(包括CSS文件和Javascript文件)的引用都放在相同的地方。可是,在文档的<head>元素中包含所有Javascript文件,意味着必须等到全部Javascript代码都被下载,解析和执行完成以后,才能开始呈现页面的内容。(浏览器在遇到<body>标签时才开始呈现内容)。所以这种做法会导致 浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口将是一片空白。

3.1.2把全部的Javascript引用放在<body>标签闭合之前
<body>
        <!--这里放内容-->
        <script src=""></script>
    </body>

在解析包含的Javascript代码之前,页面的内容将完全呈现在浏览器中。提高用户体验。

4.延迟脚本和异步脚本

4.1延迟脚本(defer属性)

这个属性的用途是表明脚本在执行时不会影响页面的构造,也就是说,脚本会被延迟到整个页面都解析完毕后再运行,无论是放在头部或者body的任何位置。

<head>
        <meta charset="UTF-8">
        <title></title>
        <script src="ex1" type="text/javascript" defer="defer" ></script>
        <script src="ex2" type="text/javascript" defer="defer" ></script>
    </head>

如例子:<script>标签虽然在头部,但是会延迟到浏览器遇到</html>后再执行。
HTML5规范要求脚本按照他们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,而这两个脚本都会先于DOMContentLoaded事件触发前执行。
但现实中并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。

4.2异步脚本(asycn属性)
  • 与defer类似,但不保证按照他们的先后顺序执行
  • 确保脚本之间不互相依赖,指定asycn属性的目的是不让页面等待两个脚本的下载和执行,从而异步加载页面其他内容。建议异步脚本不要在 加载期间修改DOM。
  • 异步脚本一定会在load事件前执行,但可能DOMContentLoaded事件触发之前或之后执行。IE不支持。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容