let和var区别:
在较旧的js,使用关键字var来声明变量,而不是let
var现在开发一般不再使用它,只是我们可能再老版程序中看到它
let为le解决var的一些问题:
var声明:
可以先使用在声明(不合理)
var声明过的变量可以重复声明(不合理)
比如变量提升,全局变量,没有块级作用域等等
区别:
- var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域
- var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征
- var 允许在同一个作用域中重复声明同一个变量,let 和 const 不允许
- 在全局作用域中使用 var 声明的变量会成为 window 对象的属性,let 和 const 声明的变量则不会
- const 的行为与 let 基本相同,唯一 一个重要的区别是,使用 const 声明的变量必须进行初始化,且不能被修改
作用域:
var没有块级作用域,而let声明的范围是块作用域; 一对大括号 就是 一个块级作用域
暂时性死区:
- 只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量
- 暂时性死区和不能变量提升的意义在于: 为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为
const优先的原因:
- const语义化更好
- 很多变量我们声明的时候就知道他不会被改变了,那为什么不用const呢
- 实际开发也是,比如react框架,基本const
const声明的值不能更改,而且const声明变量的时候需要里面进行初始化
但是对于引用数据类型,const声明的变量,里面存的不是值,是地址