在循环里面加入延迟器发生了什么

在循环里面加入延迟器发生了什么

for(var i=1;i<=5;i++){

    setTimeout(function(){

        console.log(i)

},0);



正在回答

登陆购买课程后可参与讨论,去登陆

2回答

每次循环都会生成一个延时器,延时器属于异步操作,循环结束后会在控制台打印出5个6

  • ttwin3365769 提问者 #1

    那异步操作为什么不会 1,2,3,4,5,6呢

    2021-09-02 00:25:43
  • __Promise 回复 提问者 ttwin3365769 #2
    这是作用域的问题,因为i属于全局变量,循环结束后延时器里的回调函数才执行,此时i已经等于6了。 如果想让延时器打印出12345,可以利用iife包裹,或者用let声明,让每次循环的i变成局部变量
    2021-09-02 00:37:05
好帮手慕星星 2021-09-02 10:11:53

同学你好,‘唱跳Rap打篮球_’同学解释正确

https://img1.sycdn.imooc.com//climg/613032670944106508610141.jpg

可以这样修改,形成局部作用域

https://img1.sycdn.imooc.com//climg/613032a009a438a004640237.jpg

https://img1.sycdn.imooc.com//climg/613032a70966ca8801670128.jpg

或者等后面学习了es6知识,用let定义i,形成块级作用域

https://img1.sycdn.imooc.com//climg/613032dc0901ab1203870126.jpg

https://img1.sycdn.imooc.com//climg/613032e209475b9901620137.jpg

这里了解下即可,祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师