zoukankan      html  css  js  c++  java
  • 关于let 和 var 的作用域问题

    直接来一个经典案例:

    // 1. 下面的结果是什么? 为什么?
    for (var i=0;i<5;i++){
        setTimeout(function () {
            console.log(i)
    
        },1000)
    }
    

    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循环的大括号限制;

  • 相关阅读:
    hdu1410 数学题组合概率 log优化
    Triangle
    Unique Paths II
    Unique Paths
    Pascal's Triangle II
    Pascal's Triangle
    Plus One
    Remove Duplicates from Sorted Array II
    Remove Duplicates from Sorted Array
    Remove Element
  • 原文地址:https://www.cnblogs.com/wenqiangit/p/9850498.html
Copyright © 2011-2022 走看看