- 设立"严格模式"的目的,主要有以下几个:
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
- 严格模式下无法再意外创建全局变量: 严格模式中意外创建全局变量被抛出错误替代
- 严格模式会使引起静默失败(silently fail,注:不报错也没有任何效果)的赋值操抛出异常
- 在严格模式下, 试图删除不可删除的属性时会抛出异常
- 在Gecko版本34之前,严格模式要求一个对象内的所有属性名在对象内必须唯一
- 严格模式要求函数的参数名唯一
- 严格模式禁止八进制数字语法
- ECMAScript 6中的严格模式禁止设置primitive值的属性
- 严格模式禁用 with.
- 严格模式下的 eval 不再为上层范围(surrounding scope,注:包围eval代码块的范围)引入新变量.
- 严格模式禁止删除声明变量
- 严格模式让arguments和eval少了一些奇怪的行为
- 严格模式下,参数的值不会随 arguments 对象的值的改变而变化
- 不再支持 arguments.callee。正常模式下,arguments.callee 指向当前正在执行的函数。(这意味着,你无法在匿名函数内部调用自身了。)