关于js,alert()阻塞的问题

我们知道alert()是阻塞式的,但是一下代码执行顺序有问题

执行顺序有问题( chrome 和 opera 有问题,FF,IE11 没问题)

    for(let i = 0; i < 5; i++){
        setTimeout(() => alert(i), 1000);
    }
结果: 0,3,2,1,4 或者其他顺序

这样写也没问题

    for(let i = 0; i < 5; i++)
        setTimeout(alert(i), 1000);

这样写执行顺序就没问题

    for(let i = 0; i < 5; i++){
        setTimeout(() => console.log(i), 1000);
    }
结果:0,1,2,3,4

这是为什么呢?


一只斗牛犬
浏览 1119回答 1
1回答

慕工程0101907

建议看一下setTimeout的运行原理你如果在alert 0 的时候,不去点确定,等5s(线程空闲情况,有可能需要等10s或者更长时间) 之后再去点击,你发现顺序就正常了原因是,setTimeout在中代码是,如果进程被占用,等到进程空闲了,就会跳过这次,执行下一次了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript