ES5的严格模式

ES5严格模式目的

ES5中新增的严格模式旨在消除Javascript语法的一些不合理、不严谨之处;消除代码运行的一些不安全之处,保证代码运行的安全。

为了提高我们代码的书写规范性,在严格模式下书写代码是很有必要的。

ES5严格模式的开启方式

开启严格模需要使用"use strict";有两种开启方式,一是全局开启,二是局部开启。

1. 全局开启
全局开启即是在JS的最前端使用"use strict"。

2. 局部开启
局部开启指的是作用域内的开启,即在函数的大括号内使用"use strict";

严格模式与非严格模式下的区别

1. 不允许使用伪全局变量
ES5的严格模式
在非严格模式下,没有使用var声明的变量会被变成伪全局变量。但在严格模式下,禁用了这一功能,所以上述两处打印都是a未被定义的引用报错。

2. 对函数的参数要求更严格
ES5的严格模式
上述函数中,函数的第一个形参和第二个形参命名是一致的,在非严格模式下,a先被1,后来又被2所覆盖,所以打印a,b的结果为2,3。

但在严格模式下,同名的形参是不允许存在的,浏览器会报错语法错误。

3. 实参形参和arguments分离
ES5的严格模式
我们都知道arguments是存储函数所有实参的。在非严格模式下,上述函数首先将实参汇总的1和2分别传给了a与b,随后程序又将20赋值给了a,这时候的a变成了20,b仍是2,同时arguments[0]初始值为1,在函数中因为对应的形参被赋予了新的值,造成了arguments[0]也变成了20。

在严格模式下,arguments[0]的值不会因为对应形参被赋予了新的值而发生改变,此时arguments[0]的值仍旧是函数调用时的实参值。

4.arguments的部分功能被禁用了

在严格模式下,arguments 的 callee 属性等功能被禁用了。

5.严格模式下this指向更严格
ES5的严格模式
我们不难看出,在上述的代码中,函数的this是指向window的。在实际应用中,指向window的this往往是没有用处的。

在严格模式下,禁用指向了window的this,让this指向了undefined。

6. 禁用了with语句

ES5的严格模式
在非严格模式下,我们知道,Math.random()、Math.PI可以使用with语法将Math前置。
这这样的分离会造成如下两个问题:使用with语句语法会混乱; 使用with会很大程度上降低代码的性能。

在严格模式下,with语句被进制使用。

7. 在严格模式下,禁止使用八进制。

结语:了解到严格模式后,我们现在不妨使用严格模式进行代码的书写,这样会提高代码的规范性哦。