JavaScript严格模式

严格模式

  • 使用严格模式的好处

---消除js语法的一些不合理、不严谨、不安全的问题,减少怪异行为并保证代码运行安全;

---提高编译器效率,增加运行速度;

 

  • 如何使用

----全局使用严格模式

<script type="text/javascript">
    "use strict";
     // your code
</script>

----函数内使用严格模式

<script type="text/javascript">
  (function(){
      "use strict";
      console.log("seven");
 })();
</script>

 

 

 

我们编写的JS代码,分别在严格模式、标准模式下运行时,有时候会出现不同的结果。

  • 变量的隐式声明

标准模式下,执行以下代码会隐式声明一个全局变量b,此时b相当于window.b,所以可以在函数的外部访问到b。

(function(){
    var a=b=5;
})();
console.log(b); // 5

  

但在严格模式下,以上代码则会报错

(function(){
   "use strict";
    var a=b=5;
})();   //ReferenceError:b is not defined

  

 

  • 对象重名属性

标准模式下,允许对象有重名属性,且该属性的值为最后一个出现的重名属性的值

var obj={a:1,b:2,a:3};
console.log(obj.a);  // 3

而在严格模式下,则会出现语法错误

"use strict";
var obj={a:1,b:2,a:3}; // SyntaxError

  

  • arguments.callee

在标准模式下可以使用arguments.callee

但在严格模式下使用arguments.callee则会报错 //TypeError

 

  • with语句

在标准模式下可以使用with语句

var x,y;
(function(){
   with(Math){
       x=cos(3*PI);
       y=tan(14*E);
   }
})();

  

但在严格模式下使用with语句会报语法错误

var x,y;
(function(){
  "use strict";
   with(Math){  //SyntaxError
       x=cos(3*PI);
       y=tan(14*E);
   }
})();

  

 严格模式对函数的限制:

  • 不能把函数命名为eval或arguments
  • 不能把参数命名为eval或arguments
  • 不能出现两个命名参数同名的情况
posted @ 2015-05-26 14:48  kiliro  阅读(120)  评论(0)    收藏  举报