es5的严格模式是采用具备限制性JavaScript变体的一种方式,从而使代码显示地脱离‘懒散模式/非严格模式’javascript
严格模式经过抛出错误来消除一些原有静默错误java
严格模式修复了一些致使JavaScript引擎难以优化的缺陷:有时候,相同的代码,严格模式能够比非严格模式下运行得更快。浏览器
严格模式禁用了在ECMAScript将来版本中可能会定义的一些语法。安全
在整个脚本文件或者函数体开头,写入'use strict'
语句。ecmascript
没法再意外建立全局变量,会抛出错误。ReferenceError.: *** is not defined
ide
引发静默失败的赋值操做抛出异常。 TypeError: ...
函数
试图删除不可删除的属性时会抛出异常。TypeError: ...
优化
要求函数的参数名惟一。SyntaxError: Duplicate parameter name not allowed in this context
this
禁止八进制数字语法。SyntaxError: Octal literals are not allowed in strict mode.
es5
禁止设置原始类型值的属性。TypeError: ...
禁用with
eval
再也不为上层范围引入新变量。
在严格模式下eval
仅仅为被运行的代码建立变量。因此eval
不会使得名称映射到外部变量或者其余局部变量。
禁止删除声明变量。delete name
在严格模式下会引发语法错误。SyntaxError: Delete of an unqualified identifier in strict mode.
eval
和arguments
变的简单eval
和arguments
不能经过程序语法被绑定赋值。
参数的值不会随arguments
对象的值的改变而变化。
再也不支持argument.callee
经过this
传递给一个函数的值不会被强制转换为一个对象。
不再能经过普遍实现的ECMAScript扩展“游走于”JavaScript的栈中。
函数的参数不在提供对相应函数调用变量的访问。
保留了一部分字符做为关键字。好比implements
,interface
,let
,package
,private
,protected
,public
,static
和yield
禁止了不在脚本或者函数层面上的函数声明
主流浏览器如今实现了严格模式。可是也有大量浏览器只支持部分严格模式或者根本就不支持,因此不要盲目依赖严格模式。