<script>
"use strict";
.....
</script>
应用场景:1.针对整个脚本文件。2.针对单个函数。
必须放在第一行,否则无效。
支持浏览器:IE10+、chrome等。
表现:
1.全局变量显式声明
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。
下面代码在严格模式下会报错
<script>
"use strict";
str = 'helllo';
alert(str);
</script>
2.禁止八进制表示法
正常模式下,整数的第一位如果是0,表示这是八进制数,比如012等于十进制的10。严格模式禁止这种表示法,整数第一位为0,将报错。
3.新增一些保留字
implements, interface, let, package, private, protected, public, static, yield。
使用上述保留字作为变量名会报错。
4.eval作用域
正常模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。
严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。
<script>
"use strict";
var x = 2;
console.info(eval("var x = 5;x"));
console.info(x);
</script>
严格模式下,全局下的x仍然是2。因为eval中定义的x其实是在eval作用域中新定义了x并赋值。
正常模式下,全局下的x变为5。eval中的定义并赋值其实只是对全局下x的赋值操作。
参考链接:
http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
http://jingyan.baidu.com/article/3065b3b6979b9fbecff8a4f8.html