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
- 不能出现两个命名参数同名的情况
浙公网安备 33010602011771号