共计 486 个字符,预计需要花费 2 分钟才能阅读完成。
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
正文完
发表至: javascript
2022-03-31