乐趣区

关于javascript:var和let的for循环

var 的 for 循环

在 js 代码中,咱们应用 for 循环时,要定义应用一个变量,而当咱们应用 var 关键字来进行定义的时候,难免会呈现一些问题:

当咱们应用 var 关键字对变量进行定义的时候,将会产生变量晋升,就相似于正文外面写的那样,导致 setTimeout 外面的 i 始终是同一个数据。

并且这里 setTimeout 不会被立刻执行,它们会退出一个工作栈当中。同时,for 循环是一个同步,而 setTimeout 是一个异步,异步办法要等到同步办法执行完之后才会开始执行,就导致了 i 的值曾经变成了 9 的时候,setTimeout 都还没有开始执行,这就会导致 10 个 setTimeout 中 console.log 都输入 9。

let 的 for 循环

而当咱们在 for 循环中应用 let 申明变量时,将不会呈现这种状况:

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

被 let 申明的作用域将会变成了一个块级作用域,也就是说每个 setTimeout 外面的 i 的值是不一样,也就是指向的是不同的 i,那么将会顺次输入 0,1,2,3,4,5,6,7,8,9

退出移动版