深究 JavaScript “严格模式”
目录:
1、概述
JavaScript 除了提供正常模式外,还提供了“严格模式”(strict mode)。ES5 的严格模式是采用具有限制性 JavaScript 变体的一种方式,从而使code现实地 脱离“马虎模式/松散模式/懒散模式”,这种模式下使得 JavaScript 在更加严格的条件下运行。
JavaScript 引入“严格模式”的目的主要有以下几个:
1. 消除了 JavaScript 语法的一些不合理、不严谨之处,减少了一些怪异行为
2. 消除代码运行的一些不安全之处,保证代码运行的安全
3. 提高编译器效率,提高运行速度
4. 禁用了在 `ECMAScript`的未来版本中可能会定义的一些语法,为新版本的 JavaSript 做好铺垫。比如一些保留字(class、enum、export、extends、import、super)不能用作变量名。
“严格模式”体现了 JavaScript 将朝着更合理、更安全、更严谨的方向发展,包括IE10在内的主流浏览器,都已经支持它了,许多大项目已经开始全面拥抱它。
另一方方面,同样的代码,在“严格模式”下,可能会有不一样的运行结果;一些在“正常模式”下可以运行的语句,在“严格模式”下将抛出异常。掌握这些内容,有助于更细致深入地理解 JavaScript,让你变成一个更好的程序员。
2、开启严格模式
2.1 开启严格模式的标志
"use strict";
**注意:**严格模式在 IE10 以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略。
严格模式可以应用到整个脚本货某个函数模块中,因此在使用时,我们可以将严格模式分为为脚本开启严格模式和为函数开启严格模式两种。
2.2 为脚本开启严格模式
有的 script 脚本是严格模式,而有的的 script 脚本是正常模式,这样不利于文件合并。所以可以将整个脚本文件放在一个立即执行函数中。这样独立创建一个作用域,而不会影响其他 script 脚本。
<script>
// 放到自调用匿名函数中
(function(){
// 开启严格模式
"use strict";
var num = 5;
console.log(num);
})();
</script>
将"use strict"
放在脚本文件第一行,则整个脚本都将以“严格模式”运行。如果这行语句不在第一行,则无效,整个脚本还是以“正常模式”运行。严格的说,只要前面不是产生实际运行结果的语句,"use strict"
可以不放在第一行。
2.3 为函数开启严格模式
要给某个函数开启严格模式,需要将"use strice;"
声明放在函数体所有语句之前。
function func() {
// 该函数开启严格模式
"use strict";
var num = 5;
console.log(num);
}
3、禁止未使用关键字声明变量而使用变量
严格模式:
<script>
//开启严格模式
"use strict";
// 未使用关键字声明变量
num = 5;
console.log(num);//抛异常
</script>
但是在“普通模式”下,如果变量未使用关键字声明则预加载的时候就给自动加上,并且不会抛出异常。
普通模式:
<script>
num = 5;//变量预加载时默认加上var
console.log(num);//输出5
</script>
4、禁止删除变量
严格模式:
<script>
//开启严格模式
"use strict";
var num = 5;
console.log(num);
delete num;//抛出异常
console.log(num);
</script>
普通模式:
<script>
num = 5;
console.log(num);
delete num;//删除成功
console.log(num);//抛出异常,因为变量不存在了
</script>
拓展:
1. 在 JavaScript 中是可以通过delete
关键字来手动删除变量的,但是并不是所有的对象都可以被删除
2. JavaScript 中声明,通过var、let、const、function关键字“直接”
声明因含有DontDelete,而不能被删除。
5、总结
严格模式对 Javascript 的语法和行为,都做了一些改变。当然本篇文章只摘要了其中的一小部分,如想详细了解,请参考:更多严格模式要求参考