通過for迴圈每隔兩秒按順序打印出arr中的數字
阿新 • • 發佈:2019-01-04
這個有很多種實現方法,我整理如下:
方法1:
var i=0;
var arr = [1, 2, 3, 4, 5, 6];
function f(){
if(i<arr.length){
var record=arr[i];
console.log(record);
}
i++;
}
var t = setInterval(f,2000);
if(i>=arr.length){
clearInterval(t);
}
方法2:
var arr = [1, 2, 3, 4, 5, 6]; var j = 0; function fn(){ console.log(arr[j]); j++; } for(var i = 0; i < arr.length; i++ ){ setTimeout(fn,i*2000) }
這裡我們另外一個全域性變數來儲存值,每執行一次函式fn,j就加一次,所以執行到setTimeout的時候,就會呼叫fn函式,所以會達到我們預期的效果,但是這裡這個j是一個全域性變數,全域性變數會造成容易改變其值或者命名衝突等問題.
改進:引入閉包函式.因為閉包函式,每一次建立都會存在一個自己的空間來儲存唯一的值.所以利用這個思維.我們把程式碼寫成下面的程式碼.
方法3:
我們將i的每一次執行for迴圈的值,傳給不同建立的閉包函式,這樣每一個閉包函式裡儲存的i值,就都不會一樣.所以就是達到我們的想要的結果.var arr = [1, 2, 3, 4, 5, 6]; for(var i = 0; i < arr.length; i++ ){ (function (i) { setTimeout(function () { console.log(arr[i]); }, i*2000); })(i); }
方法4:
var arr = [1, 2, 3, 4, 5, 6];
function fn() {
if(arr.length>0){
console.log(arr.shift());
}
}
setInterval(fn, 2000);
可以使用陣列的shift方法。