美文网首页
2018-07-06 ( 循环中加定时器 i的问题)

2018-07-06 ( 循环中加定时器 i的问题)

作者: Mo_ham_med | 来源:发表于2018-07-06 15:07 被阅读0次

    ifor(var i = 0;i < 2;i++){

      setTimeout(function (){
    
           alert(i)
    

    },0)

    }

    输出 两次 2 。

    因为 javascript 是 单线程 执行的,也就是无法同时执行多段代码,当某一段代码正在执行的时候,所有后续的任务都必须等待,形成一个队形,一旦当前任务执行完毕,再从队列中,取出下一个任务,这也常被成为“阻塞式执行”。

    如果代码中,设定了一个 setTimeout ,那么浏览器,便会在合适时间,将代码插入任务队列,如果这个时间设为 0 ,就代表 立即插入队列,但不是立即执行,仍然,要等待前面代码执行完毕。而在 我们这个 demo 里 for 循环 就是 所谓的 前面的代码,定时器 执行的 时机,只能在 for 循环结束,所以此时的 i 已经为 2 了 。

    javascript 是 单个 执行的, 也就是 无法同时 执行 多 { 段 } 代码,当 某 一 段 代码 正在 执行的时候,所有,后续的任务都必须等待,形成一个队列,一旦当前任务执行完毕,再从队列中 取出下一个任务。

    这就是 “阻塞式执行”。

    如果代码中,设定了 一个 setTimeout ,那么浏览器便会在合适的时间,将代码插入任务队列,如果,这个时间设为 0 , 就代表 立即插入队列,但不是立即执行,仍然,要等待前面代码执行完毕。

    而我们这个 demo 里 for 循环,就是所谓的前面的代码,定时器执行的时机,只能在 for 循环结束,所以此时的 i 已经为 2 了 。

    相关文章

      网友评论

          本文标题:2018-07-06 ( 循环中加定时器 i的问题)

          本文链接:https://www.haomeiwen.com/subject/skavuftx.html