2.1 <script>元素

  1. HTML5中为<script>元素定义了下列6个属性

    • async:可选;示意应该立刻下载脚本,但不应障碍页面中的其余操作,比方下载其余资源或期待加载其余脚本;只对外部脚本无效;
    • charset:可选;示意通过src属性置顶的代码的字符集;大多数浏览器会疏忽这个值;
    • defer:示意脚本能够提早到文档齐全被解析和显示之后再执行;只对外部脚本无效;扭转script元素加载程序
    • language:已废除;
    • src
    • type:必选;示意编写代码应用的脚本语言的内容类型(也称为MIME类型)
  2. 蕴含在<script>元素外部的JavaScript代码将被从上到下顺次解释
  3. 不要在代码中的任何地位出</script>字符串,即便是alert('</script>'),但能够应用转义字符“\”解决,eg:alert('<\/script>')
  4. 在解析内部JavaScript文件(包含下载该文件)时,与解析嵌入式JavaScript代码一样,页面的解决也会临时进行
  5. 内部JavaScript文件带有.js扩展名,然而这个扩展名不是必须的,因为浏览器不会查看蕴含JavaScript的文件的扩展名,然而服务器通常还是须要看扩展名决定为响应利用哪种MIME类型
  6. 带有src属性的<script>元素两头不应该再呈现其余代码,即便有,也只会加载内部src中的脚本文件,<script>元素两头的代码会被疏忽

2.1.1 标签的地位

依照传统的做法,所有的<script>元素都应该放在页面的<head>元素中,然而为什么当初不这样做?

首先说,这种做法的目标就是把所有的内部文件的援用都放在雷同的中央;

然而,在文档的<head>元素中蕴含所有JavaScript文件,意味着必须等到所有的JavaScript文件都下载、解析、执行结束之后,才开始出现页面内容,这会使得浏览器在出现页面时呈现显著的提早,在这期间页面一片空白,因而当初的通用做法是,将JavaScript援用放在<body>元素中页面内容的前面

2.1.2 提早脚本--defer属性

  1. 这个属性的用处:表明脚本在执行时不会影响页面的结构,即脚本会被提早到整个页面都解析结束后再运行(立刻下载,但提早执行)
  2. HTML5标准要求脚本依照他们呈现的先后顺序执行,因而几个提早脚本同时呈现的时候,会依照程序提早执行,且这些提早脚本会先于DOMContentLoaded事件
  3. 在事实中,提早脚本不肯定会依照程序执行,也不肯定会在DOMContentLoaded事件触发前执行,因而最好只蕴含一个提早脚本
  4. 局部浏览器会疏忽defer属性,因而,把提早脚本放在页面底部依然是最佳抉择

2.1.3 异步脚本--async属性

  1. 与defer属性不同之处:async的脚本并不保障依照指定他们的先后顺序执行,因而确保脚本之间互不依赖十分重要
  2. 倡议异步脚本不要在加载期间批改DOM
  3. 异步脚本肯定会在页面的load事件前执行,但可能会在DOMContentLoaded事件触发前或者后执行

2.1.4 在XHTML中的用法----略

2.1.5 不举荐应用的用法--不反对JavaScript的浏览器曾经不存在--略

2.2 嵌入代码与内部文件

在HTML中嵌入JavaScript代码没有问题,然而个别认为最好的做法还是尽可能应用内部文件来蕴含JavaScript代码,长处:

  • 可维护性:遍布不必HTML页面的JavaScript会造成保护问题
  • 可缓存:浏览器可能依据具体的设置缓存链接的所有内部JavaScript文件
  • 适应将来:XHTML和HTML蕴含内部文件的语法是雷同的

2.3 文档模式

  1. IE5.5引入文档模式的概念,这个概念是通过应用文档类型切换实现的,最后的文档模式分为两种:

    • 混淆模式:会让IE的行为与蕴含非标准个性的IE5雷同
    • 规范模式:让IE行为更靠近规范行为

    尽管这两种模式次要影响CSS内容的出现,但在某些状况下也会影响到JavaScript的解释执行

  2. 在此之后,IE又提出一种准规范模式:浏览器个性很多都是符合标准的,这种模式能够通过应用过渡型或者框架集型文档类型来触发
  3. 如果在文档开始处没有发现文档类型阐明,则所有浏览器都会默认开启混淆模式
  4. 准规范模式和规范模式十分靠近,个别提到规范模式,指的是除混淆模式以外的其余模式

2.4 <noscript>元素

  1. 晚期浏览器面临一个问题:即当浏览器不反对JavaScript时如何让页面安稳进化。----<noscript>元素
  2. 蕴含<noscript>元素中的内容只有在下列状况才会显示进去:

    • 浏览器不反对脚本
    • 浏览器反对脚本,然而脚本被禁用

    除此之外,浏览器不会出现<noscript>元素中的内容

本文由mdnice多平台公布