1. 塊級(jí)作用域: 塊作用域由 { }包括,let和const具有塊級(jí)作用域,var不存在塊級(jí)作用域。
塊級(jí)作用域解決了ES5中的兩個(gè)問(wèn)題:
內(nèi)層變量可能覆蓋外層變量用來(lái)計(jì)數(shù)的循環(huán)變量泄露為全局變量
2. 變量提升: var存在變量提升,let和const不存在變量提升,即在變量只能在聲明之后使用,否在會(huì)報(bào)錯(cuò)。
3. 給全局添加屬性: 瀏覽器的全局對(duì)象是window,Node的全局對(duì)象是global。var聲明的變量為全局變量,并且會(huì)將該變量添加為全局對(duì)象的屬性,但是let和const不會(huì)。
4. 重復(fù)聲明: var聲明變量時(shí),可以重復(fù)聲明變量,后聲明的同名變量會(huì)覆蓋之前聲明的遍歷。const和let不允許重復(fù)聲明變量。
5. 暫時(shí)性死區(qū): 在使用let、const命令聲明變量之前,該變量都是不可用的。這在語(yǔ)法上,稱(chēng)為暫時(shí)性死區(qū)。使用var聲明的變量不存在暫時(shí)性死區(qū)。
6. 初始值設(shè)置: 在變量聲明時(shí),var 和 let 可以不用設(shè)置初始值。而const聲明變量必須設(shè)置初始值。
7. 指針指向: let和const都是ES6新增的用于創(chuàng)建變量的語(yǔ)法。 let創(chuàng)建的變量是可以更改指針指向(可以重新賦值)。但const聲明的變量是不允許改變指針的指向。