关于js中setTimeout循环遇到的问题
Posted 老张在线敲代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于js中setTimeout循环遇到的问题相关的知识,希望对你有一定的参考价值。
第一种var声明变量
for(var i=0;i<10;i++)
setTimeout(()=>
console.log(i)
,0)
//输出结果:10个10
由于JavaScript是单线程的,按顺序执行,setTimeout是异步函数,它会将 内部函数放到任务队列中,而此时会先将循环执行完毕再执行 内部函数,因此当执行 内部函数时 i 已经等于10了,所以最终会输出10个10
第二种let声明变量
for(let i=0;i<10;i++)
setTimeout(()=>
console.log(i)
,1000)
//输出结果:0-9
2022深度学习开发者峰会 5月20日13:00让我们相聚云端,共襄盛会!let块级作用域,for循环外无法获取i,因为for循环头部的let将其重新绑定到循环体的每一次迭代中,确保上一次迭代结束的值重新被赋值。
setTimeout里面的function()属于一个新的作用域,通过var定义的变量是无法传入到这个函数执行域中的,通过使用let来声明块变量能作用于这个块,所以function就能使用i这个变量了;
以上是关于关于js中setTimeout循环遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章