收起左侧

[前端] 理解var、let、const

0
回复
[复制链接]

2

主题

-2

回帖

494

积分

发表于 2023-2-27 09:22:51 | 显示全部楼层 |阅读模式
一、var:1、提升
  1. console.log(num); // undefined
  2.     var num = 1;
  3.     var定义的变量会声明提升,可以理解为:
  4.     var num;
  5.     console.log(num);
  6.     num = 1;
复制代码
2、变量覆盖
  1. var num = 1;
  2.     var num = 2;
  3.     console.log(num); // 2
  4.     这段代码并不会报错,以上代码可以看成:
  5.     var num;
  6.     num = 1;
  7.     num = 2;
  8.     console.log(num); // 2
复制代码
3、没有块级作用域
  1. function demo(){
  2.     for(var i=0; i<3; i++){
  3.     }
  4.     console.log(i);  //3
  5.     }
复制代码
由于没有块级作用域,循环之后,i仍然存在
4、var在全局作用域下声明变量会挂载在 window 上
  1. var num = 1;
  2.     console.log(window.num);  // 1
复制代码
5、var是具有函数作用域的
  1. var a = 1;
  2.      function fn() {
  3.     var a = 10
  4.      }
  5. fn();
  6.      console.log(a); // 1
复制代码
在函数中用var声明的变量和全局作用域的相同,也不会进行覆盖。
二、let、const:
1、const声明的变量必须赋初始值、let则不用
2、const定义的值无法直接更改,而let定义的值可以更改
3、letconst 定义的变量不会挂载在 window
  1. let num1 = 1
  2.     let num2 = 2
  3.     console.log(window.num1)  // undefined
  4.     console.log(window.num2)  // undefined
复制代码
4、支持块级作用域
三、暂时性死区:
  1. function demo(){
  2.     console.log(num) // ReferenceError: num is not defined
  3.     let num = 1
  4. }
复制代码
letconst 存在暂时性死区,声明前不可使用

参与人数 1金币 +180 收起 理由
itjc8 + 180

查看全部评分总评分 : 金币 +180

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则