一点碎碎念:这篇文章是学js的时候现在网上看了一部分视频,画思维导图复习所学知识的时候,准备看红宝书再增进一部了解之后,发现书上基本都是用的let来声明变量当时产生的疑问【因为我看的b站视频都是采用var来声明变量】,于是有了这篇文章。纪念第一篇发出的博客。
共同点:都能声明变量
var | let | const | |
---|---|---|---|
作用域 | 函数作用域 | 块作用域 | 块作用域 |
声明提升 | 能 | 不能 | 不能 |
重复声明 | 能 | 不能 | 不能 |
全局声明时为window对象的属性 | 是 | 不是 | 不是 |
-
var
- ECMAScript6 增加了let 和 const 之后要尽可能少使用var。因为let 和 const 申明的变量有了更加明确的作用域、声明位置以及不变的值。
- 优先使用const来声明变量,只在提前知道未来会修改时,再使用let。
-
let
- 因为let作用域为块作用域!!!!【得要时刻记住这一点】
- 不能进行条件式声明
- for循环使用let来声明迭代变量不会导致迭代变量外渗透。
- 因为let作用域为块作用域!!!!【得要时刻记住这一点】
-
const
-
声明时得直接初始化变量,且不能修改const声明的变量的值
-
该限制只适用于它指向的变量的引用,如果它一个对象的,则可以修改这个对象的内部的属性。
//例子: const person = {}; person.name = "Xin"; //以上代码并不会报错 /* * 我的理解:JS的变量时直接保存在栈内存的,而对象是保存在堆中的, * 其中person中储存的是这个对象在堆中的首地址, * 对象中属性的改变并不会影响首地址的变化, * 所以对象可以突破这个限制。 */ //而如果 const a = "Hello"; //变量a指向的是"Hello"这个变量值,存储的值一旦改变了(即改变了"Hello"),则会破坏const声明的限制。
-
-
-
其他:
-
关键字声明的并不是不同类型的变量,而是指出变量在相关作用域如何存在
-
//下述两组语句会有语法错误 var name; let name; //SyntaxError let age; var age; //SyntaxError
-
-
参考:红宝书