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

  • 相关阅读:
    uva11021
    WC2019退役失败记
    北大集训2018垫底记
    NOI后训练记录
    NOI2018垫底记
    NOI前训练记录
    JSOI2018R2游(afo)记
    HNOI(AHOI)2018游记
    JSOI2018R1(九省联考)游(afo)记
    LR 8 Hello 戊戌
  • 原文地址:https://www.cnblogs.com/wenqiangit/p/9850498.html
Copyright © 2011-2022 走看看