let?和?const以及var都是js用來生命變量的方法?他們?nèi)齻€的對比是一個高頻面試題
?var?生命的變量在代碼塊外也可以獲取到?并且存在變量提升?所謂變量提升指的是將變量的聲明提升至當(dāng)前作用域的最頂部
?{
? ? ?console.log(a)
? ? ? ?var?a?=?1
? ? ?}
????//?上面代碼的運行順序本質(zhì)上是
? ? ?{
? ? ?var?a;?//?一個變量在聲明了但未賦值的情況下?他的值是默認(rèn)值也就是undefined
? ? ? ?console.log(a)
? ? a?=?1
? ? ?}
????//?let聲明會將當(dāng)前代碼塊轉(zhuǎn)化為一個暫時性的死區(qū)?在外部無法獲取代碼塊內(nèi)聲明的變量?let聲明的變量沒有變量提升?所以不能在聲明之前使用
????//?let?聲明的變量如果沒有賦值?那么他的默認(rèn)值就是undefined?可以重新賦值
????{
??????//?console.log(a)
??????//?let?a?=?1?
??????let?a;
??????a?=?2
??????console.log(a)
????}
//?const聲明會將當(dāng)前代碼塊轉(zhuǎn)化為一個暫時性的死區(qū)?在外部無法獲取代碼塊內(nèi)聲明的變量
????//?const?聲明的變量沒有變量提升?所以不能在聲明之前使用
????//?const?聲明的是一個常量?一旦聲明變量的值就不能改變了
????//?const?聲明變量不能重新賦值?但是如果值是一個引用數(shù)據(jù)類型?引用數(shù)據(jù)類型內(nèi)部的數(shù)據(jù)可以修改
????{
???????const?obj?=?{
????????name:?'zhangsan'
??????}
??????obj.name?=?'lisi'
??????console.log(obj)
????}