zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    【TypeScript】TypeScript中的数据类型
    正则表达式
    约束和异常处理
    面向对象-成员
    初识面向对象
    内置函数二
    生成器和生成器表达式
    函数名的运用
    函数
    文件操作
  • 原文地址:https://www.cnblogs.com/isremya/p/12640081.html
Copyright © 2011-2022 走看看