let
let 表示申明變量,使用let聲明變量的語法和使用var聲明的語法是一樣的。
let與var的區(qū)別
作用域不同:用 let 聲明的變量具有塊級作用域,只能在聲明的塊中訪問,在塊外面無法訪問; var定義的變量是函數(shù)作用域[局部的],但在if、for等定義的變量是全局的。
同一個變量聲明的次數(shù):在同一個作用域中同一個變量let只能聲明一次, 而var可以多次聲明;因此, let聲明的變量可以避免全局變星被污染。
是否有變量預解析: var聲明的變量存在變量提升,而let則沒有變量提升,let聲明的變量要先定義后使用。
let有暫時性死區(qū): let聲明的變量要先定義后使用。(// Cannot access i' before initialization);
var不會報錯,而是打印undefined。
變量的綁定歸屬: let聲明的變量不會綁定到頂層對象,即在全局作用域中用let聲明的變量,使用window.變量名不會生效
count
const是用來定義常量的。常量就是在整個程序運行期間其值是固定不變的。
- 它的特性與let一樣,只能在塊級作用域中有效,不能重復聲明,不存在變量提升,不會成為window的屬性,但是它一旦聲明就不能再修改值
- 如果聲明基本數(shù)據(jù)類型,聲明后是不能修改的,但是如果聲明引用數(shù)據(jù)類型,則可以修改其屬性的值
const swk = {
name: '孫悟空',
age: 600
}
swk.name = '美猴王'
console.log(swk.name)//美猴王 修改name屬性的值成功
- 在let和const聲明前的這段區(qū)域稱之為暫存性死區(qū)
- 暫時性死區(qū):暫時性死區(qū)是ES6語法引入let和const后才引入的,是指在一個塊級作用域中,存在一個死區(qū),開始于函數(shù)的開頭,結束于變量聲明的那一行,在這個死區(qū)內(nèi),無法訪問let或const聲明的變量。
- 使用let和const聲明的變量和常量不再是window的屬性。 也就是說通過window.a是無法訪問到的。