var
- 聲明的變量具有函數作用域或者全局作用域;
- 存在變量提升,即在執行上下文中,變量會被提升到函數或全局作用域的頂部,但初始化的賦值不會提升;
- 可以重復聲明同一個變量不會報錯;
- 可以被重新賦值;
- 聲明的變量會成為全局變量;
- 沒有暫時性死區,可以在聲明之前訪問變量,值為 undefined。
let
- 聲明的變量具有塊級作用域,即在
{}
內部聲明的變量只能在該內部可見; - 也存在變量提示,但是在初始化之前訪問會導致暫時性死區,在變量聲明之前訪問會跑出錯誤;
- 在統一作用域內重復聲明同一變量會報錯;
- 可以被重新賦值;
- 不可成為全局屬性;
- 暫時性死區內訪問會拋出錯誤。
const
- 聲明的變量具有塊級作用域,即在
{}
內部聲明的變量只能在該內部可見; - 也存在變量提示,但是在初始化之前訪問會導致暫時性死區,在變量聲明之前訪問會跑出錯誤;
- 在統一作用域內重復聲明同一變量會報錯;
- 如果聲明的變量是常量,重新賦值就不能改變,
----如果使用 const 聲明一個對象或數組,可以修改對象或數組的屬性或元素,但不能重新賦值一個新的對象或數組給這個變量。
----對于使用 const 聲明的對象或數組,雖然不能重新賦值一個新的對象或數組給這個變量,但可以修改對象或數組的屬性或元素。這是因為 const 保證的是變量指向的引用不變,而不是引用的值不變。
5. 聲明的變量不會成為全局對象的屬性
6. 暫時性死區內訪問會拋出錯誤。