zoukankan      html  css  js  c++  java
  • JS中for循环和定时器的小问题

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

    setTimeout是异步执行的,1000毫秒后向任务队列里添加一个任务,只有主线上的全部执行完才会执行任务队列里的任务,所以当主线程for循环执行完之后 i 的值为5,这个时候再去任务队列中执行任务,i全部为5;

    每次for循环的时候setTimeout都会执行,但是里面的function则不会执行被放入任务队列,因此放了5次;for循环的5次执行完之后不到1000毫秒;

    1000毫秒后全部执行任务队列中的函数,所以就是输出五个5啦

    假如把var换成let,那么输出结果为0,1,2,3,4;

    因为let i 的是区块变量,每个i只能存活到大括号结束,并不会把后面的for循环的 i 值赋给前面的setTimeout中的i;而var i 则是局部变量,这个 i 的生命周期不受for循环的大括号限制;

  • 相关阅读:
    表达式的计算
    树、森林、与二叉树的转换
    线索二叉树
    表达式树
    js正则表达式处理表单
    kmp匹配算法
    SQL练习题
    ajax添加header信息
    mvc中webapi添加后没法访问 解决办法
    mysql修改表引擎Engine
  • 原文地址:https://www.cnblogs.com/kawayi/p/14425600.html
Copyright © 2011-2022 走看看