1. 程式人生 > >通過for迴圈每隔兩秒按順序打印出arr中的數字

通過for迴圈每隔兩秒按順序打印出arr中的數字

這個有很多種實現方法,我整理如下:

方法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:
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);
    }
    我們將i的每一次執行for迴圈的值,傳給不同建立的閉包函式,這樣每一個閉包函式裡儲存的i值,就都不會一樣.所以就是達到我們的想要的結果.

方法4:
var arr = [1, 2, 3, 4, 5, 6];
    function fn() {
        if(arr.length>0){
            console.log(arr.shift());
        }
    }
    setInterval(fn, 2000);
可以使用陣列的shift方法。