严格模式
'use strict'
位置
- 放在脚本文件的第一行,整个脚本都将以严格模式运行。
- 放在函数体的第一行,则整个函数以严格模式运行。
会报错的情况
- 对只读属性赋值
- 删除不可配置的属性
- 对一个只有取值器(getter)、没有存值器(setter)的属性赋值
- 对禁止扩展的对象添加新属性
- 使用eval或者arguments作为标识名
- 函数有重名的参数
- 整数第一位为0
增强的安全措施
- 全局变量必须显式声明
- 禁止 this 关键字指向全局对象,避免无意间创造全局变量。
- 数内部不得使用fn.caller、fn.arguments
- 禁止删除变量
- 非函数代码块不得声明函数
- arguments 不再追踪参数的变化
- 禁止使用 with 语句
eval
语句本身就是一个作用域,eval所生成的变量只能用于eval内部。