for循环中使用setTimeout,面试题详解~

for循环中使用setTimeout

1、JavaScript是单线程的;

2、所有同步任务在主线程中执行,形成一个“执行栈”,而异步任务都会进入到任务队列中等待,

  只有当主线程里的同步任务都被执行完毕,异步任务才会进入主线程中被执行;

3、执行异步任务,就是执行对应的回调函数;

4、为什么输出的是5个5?


 <script>
        for(var i = 0;i<5;i++){
            setTimeout(function(){
                console.log(i);
            },i*1000);
        }
 </script>

for循环在主线程中执行,而settimeout被放到了任务队列中,

for循环(假设只有这个同步任务)执行完毕后,settimeout才进入主线程被执行,

而此时i=5(因为不小于5才能跳出for循环,即for循环执行完毕时i就是等于5)。

 

先要输出0 1 2 3 4 可以这样写:


<script>
        function timer(i) {
            setTimeout(function () {
                console.log(i);
            }, i * 1000);
        }
        for (var i = 0; i < 5; i++) {
            timer(i);
        }
</script>

猜你喜欢

转载自www.cnblogs.com/isremya/p/12640081.html