什么是严格模式?

272 阅读2分钟

了解:JavaScript除了提供正常模式外,ES5之后采用具有限制性的严格模式(strict mode).

  • 通俗来说:严格的条件下运行JS代码
  • 兼容:IE10以上本版浏览器才会被支持,旧浏览器中会被忽略。
  • 严格模式的变化:如图

Snipaste_2021-06-26_14-58-30.png

- 开启严格模式: 两种情况:整个脚本 或 某个函数 中开启严格模式

  • 整个脚本开启严格模式:如下图

Snipaste_2021-06-26_15-13-34.png Snipaste_2021-06-26_15-15-17.png

  • 某个函数中开启严格模式:如下图

Snipaste_2021-06-26_15-10-29.png

  • 严格模式的变化: 1.变量规定

(1)变量都必须先var声明,才能使用

 num =10 ; 
 打印console.log(num);
 在严格模式下没有先命令var声明报错
 

Snipaste_2021-06-26_15-20-35.png

(2)不能随意删除声明好的变量

delete num ; 删除num
 在严格模式下不能随意删除声明好的变量报错

Snipaste_2021-06-26_15-29-26.png

2.this指向变化

 普通模式:全局作用域中的普通函数this指向window
 严格模式:全局作用域中的普通函数this指向undefined

  1. 构造函数不加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); 报错:不能形参同名否报错
 

Snipaste_2021-06-26_15-54-07.png

(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/…