JS严格模式

<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

原文地址:https://www.cnblogs.com/wangxuehao/p/6550595.html