let
let 表示申明變量,使用let聲明變量的語(yǔ)法和使用var聲明的語(yǔ)法是一樣的。
let與var的區(qū)別
作用域不同:用 let 聲明的變量具有塊級(jí)作用域校镐,只能在聲明的塊中訪問(wèn)亿扁,在塊外面無(wú)法訪問(wèn); var定義的變量是函數(shù)作用域[局部的]灭翔,但在if魏烫、for等定義的變量是全局的。
同一個(gè)變量聲明的次數(shù):在同一個(gè)作用域中同一個(gè)變量let只能聲明一次, 而var可以多次聲明;因此, let聲明的變量可以避免全局變星被污染肝箱。
是否有變量預(yù)解析: var聲明的變量存在變量提升哄褒,而let則沒(méi)有變量提升,let聲明的變量要先定義后使用煌张。
let有暫時(shí)性死區(qū): let聲明的變量要先定義后使用呐赡。(// Cannot access i' before initialization);
var不會(huì)報(bào)錯(cuò)骏融,而是打印undefined链嘀。
變量的綁定歸屬: let聲明的變量不會(huì)綁定到頂層對(duì)象,即在全局作用域中用let聲明的變量档玻,使用window.變量名不會(huì)生效
count
const是用來(lái)定義常量的怀泊。常量就是在整個(gè)程序運(yùn)行期間其值是固定不變的。
- 它的特性與let一樣误趴,只能在塊級(jí)作用域中有效霹琼,不能重復(fù)聲明,不存在變量提升凉当,不會(huì)成為window的屬性枣申,但是它一旦聲明就不能再修改值
- 如果聲明基本數(shù)據(jù)類型,聲明后是不能修改的看杭,但是如果聲明引用數(shù)據(jù)類型忠藤,則可以修改其屬性的值
const swk = {
name: '孫悟空',
age: 600
}
swk.name = '美猴王'
console.log(swk.name)//美猴王 修改name屬性的值成功
- 在let和const聲明前的這段區(qū)域稱之為暫存性死區(qū)
- 暫時(shí)性死區(qū):暫時(shí)性死區(qū)是ES6語(yǔ)法引入let和const后才引入的,是指在一個(gè)塊級(jí)作用域中楼雹,存在一個(gè)死區(qū)模孩,開始于函數(shù)的開頭尖阔,結(jié)束于變量聲明的那一行,在這個(gè)死區(qū)內(nèi)榨咐,無(wú)法訪問(wèn)let或const聲明的變量诺祸。
- 使用let和const聲明的變量和常量不再是window的屬性。 也就是說(shuō)通過(guò)window.a是無(wú)法訪問(wèn)到的祭芦。