严格模式(是ES5引入的,不属于ES6)
ES6的模块自动采取严格模式,不管有没有在模块头部加上“use strict”
严格模式主要有以下限制:
- 变量必须声明后使用
- 函数的参数不能有同名属性,否则会报错
- 不能使用with语句
- 不能使用前缀0表示八进制数,否则会报错
- 不能删除变量(delete prop),只能删除属性(delete global[prop])
- eval不会在其外层作用域内引入变量
- arguments不会自动反映函数参数的变化
- 不能使用arguments.callee
- 不能使用arguments.caller
- 禁止this指向全局变量
- 不能使用fn.caller和fn.arguments获取函数调用的堆栈
- 增加了保留字(比如:protected,static和interface)