面试题之严格模式与混杂模式
在我刷面试题的时候遇到了这个问题,与此,我查了很多资料,决定写下来比较好记,便于自己后期复习,需要的朋友可以自行借鉴。
严格模式:又称为标准模式
除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思议,这种格式使得javascript在更严格的条件下运行的。
目的主要有:
- 消除javascript在语法方面的一些不合理,不严谨之处,减少一些误差。
- 消除代码运行的一些不安全之处,保证代码运行的安全
- 提高代码运行的效率,增加运行速度
- 为以后做好准备
它更体现了JavaScript更合理,更安全,更严谨的发展反向。
另一方面,同样的代码,在“严格模式”中,
可能不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。
进入严格模式标志
use strict
- 老版本的浏览器会把它当作一行普通字符串,加以忽略。
- 请看下面代码
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>
<body>
<script>
"use strict";
function a() {
console.log(this); //undefined 严格模式
}
f1()
</script>
<script>
function b() {
console.log(this); //window
}
f2()
</script>
</body>
</html>
上面的代码表示,一个网页中依次有两段Javascript代码。前一个script标签是严格模式,后一个不是。
混杂模式又称为兼容模式
是指浏览器用自己的方式解析代码,模拟老式浏览器的行为以防止网站停止工作
我查了一下有网友说是这样的
-
混杂模式就是指网卡能接受所有通过它的数据流,不管是什么格式,什么地址的。具体的地址转发则是在接受到数据后由MAC层来进行。
Doctype的作用
-
.<!DOCTYPE>声名位于文档的最前面,在 标签的前面,告知浏览器以何种模式来渲染文档。
-
DOCTYPE标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档。
怎样选择DOCTYPE
-
理想情况 当然是 严格的DTD,但对于我们大多数刚接触 web标准的设计师来说,过渡的DTD是目前理想选择。因为这种DTD还允许我们使用表现层的标识、元素和属性,也比较容易通过 W3C的代码校验。
注:上面说的"表现层的标识、属性"是指那些纯粹用来控制表现的tag,例如用于排版的表格、背景颜色标识等。在XHTML中标识是用来表示结构的,而不是用来实现表现形式,我们过渡的目的是最终实现数据和表现相分离。
- 打个比方:人体模特换衣服。模特就好比数据,衣服则是表现形式,模特和衣服是分离的,这样你就可以随意换衣服。而原来HTML4中,数据和表现是混杂在一起的,要一次性换个表现形式非常困难。呵呵,有点抽象了,这个概念需要我们在应用过程中逐步领会。
补充:
- DOCTYPE声明必须放在每一个XHTML文档最顶部,在所有代码和标识之上。