JS - 我使用setTimeout的循环停止循环

时间:2016-05-09 15:27:04

标签: javascript

我有以下代码:

var i = 0, count = 10, randomId;

    function f(myArray) {

          // this will get a random value from myArray
        randomId = myArray[Math.floor( Math.random()*myArray.length )]; 

          // displays the random value
        alert (randomId);


        i++;
        if( i < count ){
            setTimeout( f, 3000 );
        }
    }

    f(myArray);

以上代码有效,但只提供一个警报然后停止。

然而,它可以正常工作(10个循环),并提供基本警报,例如alert("hi"),并删除randomId行。

就好像这个函数中的任何复杂内容都会阻塞循环,它只会处理基本的警报..

感谢任何帮助,谢谢:)

1 个答案:

答案 0 :(得分:3)

在你的setTimeout中,你没有传递数组:

试试这个:

    if( i < count ){
        setTimeout(() => f(myArray), 3000 );
    }

^创建一个lambda函数,以便您可以在超时时将值传递给回调。

&#13;
&#13;
var i = 0, count = 10, randomId;

    function f(myArray) {

          // this will get a random value from myArray
        randomId = myArray[Math.floor( Math.random()*myArray.length )]; 

          // displays the random value
        alert (randomId);


        i++;
        if( i < count ){
            setTimeout(() => f(myArray), 3000 );
        }
    }

    f([1,2,3,4,5,6,7,8]);
&#13;
&#13;
&#13;