一、循環索引
正常的for循環,通過var來聲明的變量,打印變量的結果始終都是數組最后一項的下標索引,如何獲取數組每一項的索引?
1、保存當前值
每一次循環,就將當前數組的下標索引值保存到一個對象里面,這樣就可以通過這個對象獲取數組每一項的下標索引
for(var i=0;i<data.length;i++) {
//
this.index = i
alert(this.index)
}
這里是將每一次循環的索引保存到window對象的index屬性上
2、閉包
利用閉包內部函數可以調用外部函數的變量和參數的特點,可以通過將每一次循環的索引作為參數傳給內部函數使用,這樣可以確保每一次都是當前索引
for(var i=0;i<data.length;i++) {
;(function (index) {
alert(index)
})(i);
}
每次循環都必須執行一次函數,那傳入的i必然就是當前的索引,不可能直接循環完了再來執行函數
3、ES6語法-let
let聲明的變量只在當前函數有用,只能被當前聲明的函數內部使用,而var聲明的變量,相當於一個全局變量,所以地方的的值最終都會指向這個var變量,不斷的更新替換
for(let i=0;i<data.length;i++) {
alert(i)
}
每次循環都將聲明一個新的i變量,i都是一個新的值