javaScript之‘严格模式’
严格模式
除了正常运行模式,ECMAscript5添加了第二种运行模式:‘严格模式’。顾名思义,这种模式使得javascript在更严格的条件下运行。
严格模式的目的:
消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的JavaScript做好铺垫。
严格模式的书写
关键字为 "use strict". 写在哪个作用域下,在哪个作用域生效。注:尽量不要把严格模式写在全局。
严格模式的案例
声明全局变量时,必须加var
function show(){
num=10;
}
以上代码,在正常运行模式下,调用show函数可以强制声明num为全局变量。这种做法是不太容易接受的,尤其是对于有其他语言经验的同学来说,
这种做法是“错误”的。 但是在JavaScript中,以上代码可以执行。
加上严格模式后,代码如下
function show(){
"use strict"
num=10;
}
此时调用函数就会报错, 此时声明变量必须要用关键字var,而且只能为局部变量。
2.函数内重名属性
function show(a,a,b){
return a+b;
}
show(10,20,30);
以上代码,在正常运行模式下, 结果返回为50。在show函数中,return语句中的a实际为20,
因为参数中第二个a会把第一个a的值覆盖。
加上严格模式后,以上代码就会报错,因为不允许出现重复的属性名,参数中两个a是不正确的。
3.arguments对象不允许被动态改变
我们先来简单说一下arguments这个特殊的对象。
在JS中,arguments实际上是当前函数的一个内置对象。所有函数都内置了一个arguments函数,
arguments对象中存储了所有传递过来的实参。
function show(num1.num2){
num1=2;
console.log(arguments[0]);
}
show(1,2);
以上代码,在正常运行模式下,结果为2。虽然在传递参数的时候,arguments数组存储的值为1和2,但是在show函数内,又重新给num1赋值,arguments也随之改变。
加上严格模式后
function show(num1.num2){
"use strict"
num1=2;
console.log(arguments[0]);
}
show(1,2);
上述代码中,arguments[0]存储的就是传递进来的1,内部改变不会影响arguments。
4.新增保留字:implements,interface,let,package,private,protected,public,static,yield。
严格模式总结
“严格模式”体现了JavaScript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它。
- 点赞
- 收藏
- 关注作者
评论(0)