严格模式与非严格模式的区别在于以下几点
1,全局变量的显示声明
2,严格模式限制了动态绑定,比如禁止使用with,创设eval的单独作用域
3,严格模式下让你头痛的this关键字不能指向全局变量了
4,不能重名:对象不能有重名属性,方法不能有重名形参
5,对于arguments的限制,严格模式下不能对其赋值了,也不再跟踪参数的变化,arguments.callee也不允许使用
6,函数必须声明在顶层,不允许在非函数代码块内声明函数
7,试图删除不可删除的属性时会抛出异常
8,严格模式禁止八进制数字语法
9,ECMAScript 6中的严格模式禁止设置primitive值的属性
10,在严格模式中一部分字符变成了保留的关键字。这些字符包括implements
, interface
, let
, package
, private
, protected
, public
, static
和yield
。在严格模式下,你不能再用这些名字作为变量名或者形参名。