let隻在目前聲明區域有效
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
a是局部變量,b是全局變量,a在外不生效
不存在變量提升
// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;
// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;
var聲明的變量會有變量提升的效果,即使未指派還是會聲明,let沒有,在聲明之前讀取就會報錯
暫時性死區
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
如果在聲明之前給變量指派或者在之前檢視變量的類型都會報錯
不允許重複聲明
function func(arg) {
let arg;
}
func() // 報錯
function func(arg) {
{
let arg;
}
}
func() // 不報錯
上圖,函數參數已經聲明"arg"的變量,函數裡再次聲明就會報錯
有塊級作用域
{{{{
let insane = 'Hello World';
{let insane = 'Hello World'}
}}}};
這樣每個層級都會有一個作用域,并且互不影響,很友善我們定義各種變量
const
一般用來定義常量,定義後,常量的值不可改變,改變就會報錯~是以一旦聲明常量就得指派,不然就會報錯…
其他用法就和let是差不多的
PS:參考阮老師的書做出的整理