js严格模式介绍
通过在文件或者函数内顶部添加"use strict"可以启用严格模式,严格模式主要是减少了一些旧js不合理之处
严格模式的改变
- 未声明的变量不再自动赋值给全局变量,而是报错
- 静态绑定,旧js允许运行时确定属性和方法属于哪个对象,比如with语句内部,
- 禁止使用with语句
- eval现在有自己的作用域
- 增强的安全措施
- 禁止顶级函数中的this指向全局对象,现在this会等于undefined
- 禁止在函数内部遍历调用栈
jsfunction f1(){ "use strict"; f1.caller; // 报错 f1.arguments; // 报错 } f1();
- 禁止删除变量,可以删除configurable设置为true的对象属性
- 显示报错,对不可赋值属性赋值或者其他情况
- 重名错误
- 对象属性不能重复
- 函数参数名不能重复
- 禁止o开头的8进制语法
- arguments限制
- arguments现在是关键字了,不允许作为变量名或者参数名或者赋值
- arguments不再追踪参数变化
- 禁止使用arguments.callee
- 函数必须声明在顶层
- 新增了很多保留字
其他说明
ESM模块会忽略"use strict", 内部自动启用严格模式, esm模块即内部用了es6的import export语法的文件
webpack打包工具会自动给esm模块顶部添加use strict