除了正常运行模式之外,ECMAScript5还引入了第二种运行模式:严格模式(strict mode)模式。严格模式是为了JavaScript定义了一种不同的解析与执行模型。在严格模式下,ECMASript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
引入严格模式的目的:
1.消除JavaScript语法的一些不合理,不规范,不严谨之处,减少一些怪异行为;
2.消除一些不确定的行为,保证代码运行的安全;
3.提高编译器效率,增加运行速度;
4.为未来新版本的Javascript做好铺垫。
在严格模式下,JavaScript的执行执行结果会有很大的不同,支持严格模式的浏览器包括:
IE10+,Firefox4+,Safari5.1+,Opera12+和Chrome。
如果想要在整个脚本启用严格模式,可以在顶部添加如下代码:
“use strict”
这行代码看起来更新是字符串,而且也没有赋值给任何变量,但其实它是一个编译指示(pragma),用于告诉支持的JavaScript引擎切换到严格模式,这是为了不破坏ECMASript3语法而特意选定的语法。
需要注意的一点是将“use strict“脚本文件必须要放在第一行,则整个脚本文件都以”use strict“严格模式运行,假如”use strict“不在第一行,则不在运行严格模式,在这样的情况下,整个脚本都以”正常模式运行“。如果你没有控制页面中所有脚本的权力,建议只在需要测试的特定函数中开启严格模式。
如何调用javaScript严格模式
"严格模式"有两种调用方法,使用于不同的场合
1.针对整个脚本文件
<script>
"use strict"
console.log("这是严格模式")
</script>
<script>
console.log("这是正常模式")
</script>
2.针对单个函数
将"use strict"放在函数体的第一行,则整个函数以"严格模式"运行。
function strict(){
"use strict";
return "这是严格模式。";
}
function notStrict() {
return "这是正常模式。";
}
3.脚本文件的变通写法
因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中。
(function (){
"use strict";
// some code here
})();
全局变量显式声明
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。
"use strict";
v = 1; // 报错,v未声明
for(i = 0; i < 2; i++) {
// 报错,i未声明
}
因此,严格模式下,变量都必须先用var命令声明,然后再使用。