探究一下严格模式,也是我个人一直推崇的,简单记录一下。
在ECMAScript5引入了strict mode
----------- 方便更快地调试出错误
- 如何使用:
"use strict";
- 兼容性:
http://caniuse.com/#feat=use-strict

- 去除with
- 防止意外的全局变量
变量在赋值之前必须声明,严格模式下会抛出异常。

- 杜绝重复
对象定义了重复的属性或者函数的参数名重复
- 取消this的强制转换
当this为null或者undefined的时候,不会强制转换为全局对象,必须赋值
同样构造函数没有new 也抛错
window.color ="red";
function test(){
alert(this.color);
}

- 更安全的eval
在eval中的语句声明变量:仍然呆在里面
(function(){
eval("var i = 1;");
//严格模式i没有声明,抛错
//非严格,i为1
alert(i);
});
换种方式:
(function(){
var result = eval("var i=1,j=2;i+j");
//严格和非严格多是一样
alert(result);
})
- eval不能作为字符串来做标识符(变量、函数名、参数名 等 )

- 函数声明无法嵌套在语句或块中,只能显示在顶级货直接显示在函数体中
function test(){
for(var i=0;i<10;i++){
function getTest(){
};
}
}

- 字符串“arguments”不能用作标识符(变量或函数名、参数名等)

- 修改arguments这个对象里面的某些值的问题
function test(num){
arguments[0] = 1;
console.log(num);
//非严格模式1
//严格模式10,因为arguments对象只是一个本地副本
}
test(10);
- 八进制数say NO

- 未来保留关键字无法使用
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
推荐编写
严格模式的方式:
;(function(){
"use strict";
function getXXX(){
}
function setXXX(){
}
})();
扩展阅读:

本文详细介绍了ECMAScript5引入的严格模式,包括其使用方法、兼容性以及带来的多种改进,如去除with语句、防止意外全局变量、杜绝重复定义等,并推荐了一种最佳实践。
899

被折叠的 条评论
为什么被折叠?



