美文网首页JavaScript < ES5、ES6、ES7、… >
for循环中var或let和异步的使用

for循环中var或let和异步的使用

作者: sweetBoy_9126 | 来源:发表于2019-02-14 22:56 被阅读14次
  1. 在for循环中使用var
for(var i = 0;i<2;i++){
  setTimeout(()=>{console.log(i)})
}

上面的代码输出两个2,原因是for循环属于同步,setTimeout属于异步,同步代码执行完才会去执行异步,也就是上面代码每次循环都会项任务队列里加一个定时器,等for循环结束后开始执行,这时候的i是2,所以会打印出两个2。在for循环中用var就是一个全局的i,所以每次会被后面的给替换

  1. 在for循环中使用let
for(let i = 0;i<2;i++){
  setTimeout(()=>{console.log(i)})
}

2中的代码最后打印出的是0,1。因为for循环中使用let循环几次就会生成几个i,也就是说在每次进入循环的时候都会把之前的i赋值给一个新的i

  1. 在for的表达式中使用异步
    需要提前说明的知识
let i = 0,1
//等价于
let i = (0,1)

上面的代码结果都是1,对于逗号表达式如果你有一连串的操作,那么这个表达式的值就是最后一个

典型例题

for(let i = (setTimeout(()=>{console.log(i)},233),0);
    i<2;
    i++
){
    console.log(i)
}

上面的setTimeout里的i又是什么?
答:0;
解释:
2中说了每次进入循环前都会生成一个新的i,这个i就是在初始化表达式后,条件表达式前生成的,也就是说在判断这个i的值之前就已经生成了一个新的i了,这个新的i要不就是初始值要不就是上一次循环的i的值,再次以2中的代码来解释,就相当于

for(let i = 0;let i = _i, i<2;i++){
setTimeout(()=>{console.log(i)})
}
上面的代码,一开始i=0,然后把这个0赋值给一个新的i,再去判断i是否小于2,如果小于2就进入循环,得到0,然后把这个0进行++得到一个1,再次把这个1赋值给一个新的i,判断是否小于2,小于2进入循环得到1,然后1在++得到一个2,把这个2赋值给一个新的i,这个时候不小于2退出循环
所以这个典型例题里面的初始化表达式的i跟后面的i没有关系,只是它的值会复制给后面的i,所以最后还是0

相关文章

  • for循环中var或let和异步的使用

    在for循环中使用var 上面的代码输出两个2,原因是for循环属于同步,setTimeout属于异步,同步代码执...

  • ES6 let var const解析

    let 和 var,const let声明的变量只在let所在的代码块有效 for循环中,var声明的是全局的,l...

  • 一、ES6新增特性 let 和const

    1、let命令 let与Var区别: let用户声明变量,但只在所在的代码块内生效,在for循环中使用很是合适;v...

  • ES6 let与const

    let和const let命令 let用法类似var,但是所声明的变凉,只在let命令所在的代码块内有效 for循...

  • 第一章 let和conset命令

    let 1.let声明类似于var,但是let只在所在的代码块中有效,可以很好的用在for循环中代替var,记住只...

  • ES6----let ,var

    let所声明的变量只在代码块内有效,在for循环中使用let,每次都会新声明一个新的变量i 使用var声明变量,则...

  • [转载] for循环中let和var区别

    首先看一段代码: 区别: var是全局作用域,有变量提升的作用,所以在for中定义一个变量,全局可以使用,循环中的...

  • 深入理解ES6 ---- let const

    es5中使用在for-in for-of循环中注册异步事件,异步事件中的i总是最后一个值。使用es6的let co...

  • 67.for循环中的var 和 let

    day16:这段代码我们应该都见过,想要的效果是我们每隔一秒钟分别打印出来1,2,3,4,5。然而,效果却是打印了...

  • (一)let 和 const 命令

    let命令 let命令声明的变量,只在let所在的块级作用域有效 如果将循环中的let写为var,则arry[3]...

网友评论

    本文标题:for循环中var或let和异步的使用

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