Strict mode finally debunked! Well, for me, at least.

严格模式可以“屏蔽”JavaScript 语言在使用中容易引起 bug 的功能,禁止出现不符合规范的代码,从而让 JS 的编译器更高效地运行。

  • 变量被声明时必须被赋值。
  • 函数参数必须具有唯一名称(否则会被视为语法错误)
  • 禁止使用 with
  • 只读属性被赋值时会报错。
  • 00840 这样的八进制数字报语法错误。
  • 尝试 delete 不可删除的属性会引发语法错误。
  • delete prop 会报错, delete global [prop] 不会。
  • eval 不会将新变量引入其所在作用域。
  • eval 和参数不能被绑定或赋值。
  • arguments 不会跟踪方法参数的变更。
  • arguments.callee 引发 TypeError,不再支持。
  • arguments.caller 引发 TypeError,不再支持。
  • 方法被调用时作为this传入方法的上下文不会变成对象。
  • JavaScript 堆栈不能通过使用 fn.callerfn.arguments 访问 。
  • 保留字(例如 protectedstaticinterface 等)无法被赋值。