说一下 JavaScript 严格模式下有哪些不同

1.1 将过失错误转成异常

  • 严格模式下无法再意外创建全局变量。
  • 严格模式会引起静默失败的赋值操作抛出异常
  • 在严格模式下,试图删除不可删除的属性时会抛出异常
  • 严格模式要求函数的参数名唯一
  • 严格模式禁止八进制数字语法
  • ECMAScript 6 中的严格模式禁止设置 primitive 值的属性

1.2 简化变量的使用

  • 严格模式禁用 with
  • 严格模式下 eval 不再为上层范围引入新变量
  • 严格模式禁止删除声明变量

1.3 让 eval 和 arguments 变的简单

  • 名称 eval 和 arguments 不能通过程序语法被绑定(be bound)或赋值
  • 严格模式下,参数的值不会随 arguments 对象的值的改变而变化。
  • 不再支持 arguments.callee。

1.4 安全的 JavaScript

  • 在严格模式下通过 this 传递给一个函数的值不会被强制转换为一个对象。
  • 在严格模式中再也不能通过广泛实现的 ECMAScript 扩展“游走于”JavaScript 的栈中。
  • 严格模式下的 arguments 不会再提供访问与调用这个函数相关的变量的途径。

1.5 为未来的ECMAScript版本铺平道路