了解:JavaScript除了提供正常模式外,ES5之后采用具有限制性的严格模式(strict mode).
- 通俗来说:严格的条件下运行JS代码
- 兼容:IE10以上本版浏览器才会被支持,旧浏览器中会被忽略。
- 严格模式的变化:如图
- 开启严格模式: 两种情况:整个脚本 或 某个函数 中开启严格模式
- 整个脚本开启严格模式:如下图
- 某个函数中开启严格模式:如下图
- 严格模式的变化: 1.变量规定
(1)变量都必须先var声明,才能使用
num =10 ;
打印console.log(num);
在严格模式下没有先命令var声明报错
(2)不能随意删除声明好的变量
delete num ; 删除num
在严格模式下不能随意删除声明好的变量报错
2.this指向变化
普通模式:全局作用域中的普通函数this指向window
严格模式:全局作用域中的普通函数this指向undefined
- 构造函数不加new调用,this会报错:
function Fu(){
this.name ='李'; 报错因为这里this指向undefined如果给其赋值会报错
}
Fu()
注: 构造函数加new指向的还是对象实例化
注: 定时器this还是指向window
注:事件对象还是指向调用者
4.函数变化
(1)不能形参同名否报错
不同模式:
function fn(a,a){
console.log(a + a);
}
fn(1,2); 输出 4
严格模式:
"use strict"
function fn(a,a){
console.log(a + a);
}
fn(1,2); 报错:不能形参同名否报错
(2)if 和for 中不能放入函数否则报错
严格模式:
"use strict"
if(true){
function fn(){ } //报错语法错误
}
for(let i = 0; i <5 ; i ++){
function fn(){ } //报错语法错误
}
函数中可以放函数
function fn(){
function main(){ } //合法
}
总结:
- 变量规范:(1)使用变量要先命令ver(2)定义好的变量不能随意删除
- this指向:(1)全局作用域普通函数指向undefined (2)不加new的构造函数指向undefined
- 函数变化: (1)形参名不能同名(2)if和for 中不能定义函数
- 更多严格模式要求参考:developer.mozilla.org/zh-CN/docs/…