又來更新學習筆記啦~數組
let數據結構
特色閉包
const異步
特色學習
let的出現是爲了解決一些var存在的問題spa
// 下面兩個i,雖然名字同樣,可是不在一個做用域,因此互不影響 for (let i = 0; i < 3; i++) { let i = 'foo' console.log(i) // foo }
const arr = [1, 2, 3, 4] for(let i = 0; i < 3; i++) { for(let i = 0; i < 4 ; i++) { console.log(arr[i]) } } // 1 2 3 4 1 2 3 4 1 2 3 4
for (var i = 0; i < 3; i++) { setTimeout(() => { console.log(i) }, 0) } // 輸出三個3
{ let a = 1 console.log(a) } console.log(a) //a is not defined
var b = 3 let c = 4 console.log(b, c) // 3,4 console.log(window.b, window.c) //3,undefined
var b = 3 let c = 4 console.log(b, c) // 3,4 var b = 4 console.log(b) //4 let c = 5 // Identifier 'c' has already been declared c已經被聲明 console.log(c)
function test() { console.log(a) let a = 1 } test() // Cannot access 'a' before initialization 不能在初始化以前調用
cosnt a = 2 a = 3 //Assignment to constant variable 類型錯誤
const a //Missing initializer in const declaration 聲明的時候缺乏初始化 a = 2
const實際上保證的,並非變量的值不得改動,而是變量指向的那個內存地址不得改動,對於簡單類型的數據(數值,字符串,布爾值),值就保存在變量指向的那個內存地址,所以等同於常量。指針
但對於複合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指針,const只能保證這個指針指向的內存地址是固定的,至於它指向的內存地址中保存的數據結構是否是可變的,就徹底不能控制了。所以將一個對象聲明爲常量要當心。code
不用var,主用const,遇到可變的使用let對象