第2章节,主要讲的是script元素、行内与外部脚本的比较、文档模式、js不可用时的做法。没有书,或者懒得看书的可以看我写的概括啦~尽量短小精辟会一直更下去der!

1、script元素

从上到下解释代码,按页面出现顺序进行执行(前提是没有使用async和defer)

· async:只对外部脚本有效,立即下载脚本,不保证能按照它们出现的次序执行,谁先下载完就加载谁,会在页面load事件前执行,不应该在加载期间修改dom,一些浏览器会忽略;

· defer:只对外部脚本有效,告诉浏览器立即下载,但延迟到文档完全解析后再执行,原则上按照它们被列出的次序执行,一些浏览器会忽略;

· charset:配合src属性指定代码字符集,大多浏览器不在乎;

· src:要被执行的外部文件,可以是url不受同源策略影响解析url时使用get请求,受父页面 HTTP/HTTPS 协议的限制;

· crossorigin:默认不使用 CORS,crossorigin="use-credentials"设置凭据标志,意味着出站请求会包含凭据;

· integrity:对比接收到的资源的签名与这个属性指定的签名是否匹配,否则页面会报错,脚本不会执行,可以防范安全问题,但不是所有浏览器都支持;

· type:这个值始终都是"text/javascript";

2、使用script的方式

使用script的方式有两种,一种是在<script>元素中写代码(行内代码),一种是src属性进行引入代码

第一种:(行内代码)

<script>
   function sayScript(){
      //代码中不能出现字符串</script>会报错被当成结束标签
      //配合使用转义字符“\”就可
       console.log("<\/script>");
    }
</script>

第二种:(外部引入)

<script src="example.js"></script>
//外部引入<script></script>闭合标签中不能再写行内代码,行内代码会被忽略

· 推荐使用外部引入文件:

不分散、集中好维护;浏览器会有缓存,只需要下载一次,加载更快;

3、script的标签位置

放在<head>标签内,js解析完了才渲染body页面,如果js比较多会有渲染延迟导致明显空白。

放在<body>元素中的页面内容后面,可以解决以上问题

<body>
  <!-- 这里是页面内容 -->
  <script src="example1.js"></script>
  <script src="example2.js"></script>
</body>

4、动态加载js

//这种方式相当于加了个async,属于异,并非所有浏览器都支持async属性
let script = document.createElement(‘script’);
script.src = “example.js”;
//-------start 加上以下这句,为同步加载
script.async = false;
//--------end
Document.head.appendChild(script);

影响队列的优先级 可能 会影响性能,让预加载器知道动态js的存在,在头部显式声明一下:

<link rel="preload" href="example.js">

5、文档模式

混杂模式和标准模式、准标准模式

· 混杂模式:混杂模式在所有浏览器中都以省略文档开头的 doctype 声明作为开关。这种约定并不合理,混杂模式在不同浏览器中的差异非常大。

· 准标准模式与标准模式:非常接近,很少需要区分,一般都直接叫标准模式。

标准模式通过下列几种文档类型声明开启:

<!-- HTML 4.01 Strict -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">


<!-- XHTML 1.0 Strict -->
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- HTML5 -->
<!DOCTYPE html>

准标准模式通过过渡性文档类型(Transitional)和框架集文档类型(Frameset)来触发

<!-- HTML 4.01 Transitional -->
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<!-- HTML 4.01 Frameset -->
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

<!-- XHTML 1.0 Transitional -->
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!-- XHTML 1.0 Frameset -->
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

6、js不可用时的做法

使用<noscript>元素,可以指定在浏览器不支持脚本时显示的内容。如果浏览器支持并启

用脚本,则<noscript>元素中的任何内容都不会被渲染。

<noscript>
    <p>该浏览器不支持脚本,换个浏览器吧</p>
</noscript>