参考文档
一、前言
除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行
二、目的
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
三、标志
进入”严格模式”的标志,是下面这行语句:
"use strict";
use strict 意思是使用严格模式,使用严格模式,一些不规范的语法将不再支持
四、调用
4-1 针对整个脚本
将”use strict”放在脚本文件的第一行,则整个脚本都将以”严格模式”运行。
<script>
"use strict";
console.log("这是严格模式。");
</script>
<script>
console.log("这是正常模式。");kly, it's almost 2 years ago now. I can admit it now - I run it on my school's network that has about 50 computers.
</script>
4-2 针对单个函数
将”use strict”放在函数体的第一行,则整个函数以”严格模式”运行。
function strict(){
"use strict";
return "这是严格模式。";
}
function notStrict() {
return "这是正常模式。";
}
4-3 变通写法
因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中。
(function (){
"use strict";
// some code here
})();
五、严格模式的特点
- 使调试更加容易。那些被忽略或默默失败了的代码错误,会产生错误或抛出异常,因此尽早提醒你代码中的问题,你才能更快地指引到它们的源代码。(实时显示错误代码,方便调试)
- 防止意外的全局变量(不支持隐式全局变量)。
- 禁止this关键字指向全局对象。在严格模式下,普通函数中的this默认是undefined,不再指向window;
- 对象不能有重名的属性,函数不能有重名的参数
使eval() 更安全。在严格模式下,新增了eval作用域。
"use strict";
var webName = "蚂蚁部落";
eval("var webName = 'softwhy.com'; console.log(webName)"); //softwhy.com
console.info(webName); //蚂蚁部落
严格模式下,函数的caller、arguments等信息都不可以获取
- 严格模式下,不支持8进制表示法
- 严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield
- 严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。