关于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

let块级作用域,for循环外无法获取i,因为for循环头部的let将其重新绑定到循环体的每一次迭代中,确保上一次迭代结束的值重新被赋值。
setTimeout里面的function()属于一个新的作用域,通过var定义的变量是无法传入到这个函数执行域中的,通过使用let来声明块变量能作用于这个块,所以function就能使用i这个变量了;

2022深度学习开发者峰会 5月20日13:00让我们相聚云端,共襄盛会!

以上是关于关于js中setTimeout循环遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

JS事件循环机制(宏任务,微任务)

JS setTimeout 循环传入参数问题

js定时器之setTimeout的使用

setTimeout 在 while 循环中

JS实现停留几秒sleep,Js中for循环的阻塞机制,setTimeout延迟执行

js经典面试问题:如何让for循环中的setTimeout()函数像预想中一样工作?