在脚本的第一行或者函数体的第一行写'use strict';可以进入严格模式
script type="module" 默认就是严格模式
- argument.caller、argument.callee、with不能使用
- with语句不能使用
- 函数内部的this为undefined
- 变量必须使用声明关键字声明
- 严格模式下修改this指向,如果是原始值,则this也是原始值,在非严格模式下会自动使用包装类转化为对象
- 函数的形参名不能重复
- eval函数有独立的作用域
- 对只读属性赋值,会报错;删除不可配置的属性,会报错;对一个只设置了取值器的属性赋值会报错;对禁止扩展的对象添加新的属性,会报错
- 严格模式下,使用
eval或者arguments作为标识名会报错 - 禁止八进制的前缀0表示法
- 严格模式下无法删除变量,如果使用
delete命令删除一个变量,会报错。只有对象的属性,且属性的描述对象的configurable属性设置为true,才能被delete命令删除 - arguments 不再追踪参数的变化
- 非函数代码块不得声明函数
- 使用保留字作为变量名会报错
- ==在ES6严格模式下会开启尾调用优化,正常模式尾调用优化默认是关闭的==
在Node.js里面如果不用严格模式,函数里的this默认是指向全局对象global,如果用的话是函数里的this是undefined