ES6 let const

暫時(shí)性死區(qū):只要塊級(jí)作用域內(nèi)存在let命令,它所聲明的變量就綁定這個(gè)區(qū)域,不再受外部影響。

暫時(shí)性死區(qū):let.const

let,不允許重復(fù)聲明,let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量;不能在函數(shù)內(nèi)部重新聲明參數(shù);

const命令

  ?聲明一個(gè)只讀的常量。一旦聲明,常量的值就不能改變。

?  同時(shí)也說明,一旦聲明,就要立即初始化,否則也報(bào)錯(cuò)。

與let相似:

   const命令聲明的常量也不提升,同樣存在暫時(shí)性死區(qū),只能在聲明的位置后使用。

   也不可以重復(fù)聲明。

對(duì)于復(fù)合類型的變量,變量名不指向數(shù)據(jù),而是指向數(shù)據(jù)所在的地址。const命令只

   是保證變量名指向的地址不變,并不保證該地址的數(shù)據(jù)不變,所以將一個(gè)對(duì)象聲明為常量,

   必須非常小心。


const foo = {};

? ? ? ? ? ? foo.prop = 123;

? ? ? ? ? ? console.log(foo.prop);

? ? ? ? ? ? //上面的常量foo存儲(chǔ)的是對(duì)象的地址,這個(gè)地址不可變,但依然可以添加屬性。const a = [];

? ? ? ? ? ? a.push("hello");

? ? ? ? ? ? a.length = 0;//? ? ? ? ? a = ["Dave"]? //報(bào)錯(cuò),賦值就是更換地址,不行的。//如果真的想把對(duì)象凍結(jié),應(yīng)該使用Object.freeze方法。const foo2 = Object.freeze({});

? ? ? ? ? ? //常規(guī)模式下,下面一行不起作用//嚴(yán)格模式下,會(huì)報(bào)錯(cuò)foo.prop = 123;

  ES5只有兩種聲明變量的方法:var和function?! ?/p>

  ES6有6種:var function let const class import

全局對(duì)象屬性:

  ?全局對(duì)象是最頂層的對(duì)象,在瀏覽器環(huán)境下指的是window對(duì)象,在node指的是

?  global對(duì)象。ES5中,全局對(duì)象的屬性和全局變量是等價(jià)的。

  ?未聲明的全局變量,自動(dòng)成為全局對(duì)象window的屬性,這被認(rèn)為是js的最大敗筆。

?  ES6為了改變這一點(diǎn),一方面規(guī)定,為了保持兼容性,var命令和function命令聲明的全局變量,

  ?依舊是全局對(duì)象的屬性,另一方面規(guī)定,let,const,class命令聲明的全局變量不屬于全局對(duì)象的

?  屬性。也就是說,從ES6開始,全局變量將逐漸與全局對(duì)象的屬性脫鉤。

  ES5只有全局作用域和函數(shù)作用域,沒有塊級(jí)作用域,有很多不合理場(chǎng)景:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容