##### 'use strict'
use strict 是es5的一条指令。
- **严格模式下禁止使用with语句**
- **所有变量都要提前声明**!
- **调用的函数的this值是undefined**,**而非严格模式下this指向window**
- **通过call和apply调用函数时,其中的this值就是传入的第一个参数。(在非严格下,null和undefined值被全局对象和转换为对象的非对象值所代替)**
- **给只读属性赋值或者给不可扩展的对象增加新属性,都会抛出类型异常(在非严格下只是操作失败,不会报错)**
- **传入eval的代码不能声明变量或函数**
- **函数里的arguments对象拥有传入函数值的静态副本。在非严格下,arguments对象具有“魔术般”的行为,arguments里的数组元素和函数参数都是指向同一个值的引用。**
- **当delete后跟随非法的标识符(比如变量、函数、函数参数)时,会抛出语法错误异常,在非严格下,delete啥也没做,并返回false**
- **试图删除一个不可配置的属性将抛出一个类型异常错误(非严格下,delete啥也没做,并返回false)**
- **一个对象中**,**定义相同的属性名会抛出语法异常错误**
- **严格模式中不允许使用八进制整数直接量(以0为前缀,而不是0x为前缀)的**
- **标识符eval和arguments当做关键词,他们的值是不能更改的,不能给这些标识符复制,更不能讲他们声明为变量、用作函数名、函数参数或者catch块的标识符**
- **arguments.caller和arguments.callee都会抛出一个类型异常错误。严格模式的函数同样具有caller和arguments属性,当访问这两个属性时将抛出类型异常错误**