我对var,let,const的理解

首先说一下作用域的问题 全局作用域(在全局定义的数据随处可用),函数作用域(此处定义的数据只有在函数内可用外部不可用),还有块级作用域(此处作用域定义的数据const和let外部皆不可用,var外部可用)
(1)var 特点变量提升 可以穿透块级作用域 也就是if for这种{} 在块作用域中定义的var 在块外同样可以使用

(2)const,let 没有变量提升,具有块级作用域
2.1 let 具有变量死区,无法在let的块作用域中重复定义相同的变量{let a var a}报错 {let a let a}更加会报错
2.2什么情况下不会报错
function fn1 (n){ let a = 15 if(true){ let a = 16 } console.log(a) } fn1()
此时两个let在两个块中
2.3 const的静态变量 不可修改地址值 也就意味着 开始定义const就要赋值,不然将毫无意义(并且会报错)
2.3.1当const 作为引用类型时不可直接改变地址值 例如 const obj = [] obj[0] = 1 完全正确
23.2但是当const 是基本数据类型 就无法改变一丝一毫了
以上是我对这三个声明方式的理解 但是感觉缺点什么 如果有不同看法 欢迎指摘 谢谢

posted @ 2021-01-20 23:12  在今天  阅读(56)  评论(0)    收藏  举报