不存在變量提升
var
命令會發生“變量提升”現象,即變量可以在聲明之前使用,值爲undefined
。這種現象多多少少是有些奇怪的,按照一般的邏輯,變量應該在聲明語句之後纔可以使用。
爲了糾正這種現象,let
命令改變了語法行爲,它所聲明的變量一定要在聲明後使用,否則報錯。
// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;
// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;
上面代碼中,變量foo
用var
命令聲明,會發生變量提升,即腳本開始運行時,變量foo
已經存在了,但是沒有值,所以會輸出undefined
。變量bar
用let
命令聲明,不會發生變量提升。這表示在聲明它之前,變量bar
是不存在的,這時如果用到它,就會拋出一個錯誤。