var
var是js中最早出現的定義變量關鍵字,但是var有着天生的缺陷,var定義的變量並不是完全以塊作爲作用域的,用var來定義的變量,有時候會出現意外的結果,比如:
for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 100 * i);
}
這段代碼輸出的是:
10
10
10
10
10
10
10
10
10
10
而不是我們期待的:
0,1,2,3,4,5,6,7,8,9
這是因爲setTimeout
函數讓後面的匿名函數延遲執行了,在第一個匿名函數執行時,for
循環早就跑完了,這個時候i
已經是10
了,正是因爲var定義的變量會因爲時間跳出框外,所以在處理許多回調,事件之類的情況下會變得非常複雜。
let
let就是正常的用塊來表示作用域的變量。
const
const與let的區別在於用這個關鍵詞聲明的變量不能改變。