javascript - settimeout()的问题的3个疑惑点

查看:74
本文介绍了javascript - settimeout()的问题的3个疑惑点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

直接附上代码:

for (var i = 0; i < 5; i++) {
  setTimeout((function(i) {
    console.log(i);
  })(i), i * 1000);
}

运行结果是立即输出0、1、2、3、4

疑惑点:
1:在setTimeout()里面的第一个参数赋予一个立即执行函数,setTimeout的延时就不起作用了,为什么不是每隔一秒依次输出0、1、2、3、4?

2:为什么输出的不是5了,setTimeout执行的时候 for里面的i还没有变成5吗?不是setTimeout要在for执行完再执行的吗?
可以跟下面这个做比较,下面这个函数我的第三个疑惑点是:为什么第二个参数里面的1000*i 里面的i不起作用,就是为什么不是每隔5秒输出呢,因为轮到settimeout执行时,i不是已经变成5了吗?

for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000 * i);
}

运行结束时每隔一秒输出一个5,一共5个5.

希望有大牛帮忙解答这三个疑惑点,我理解的不是很到位,谢谢。

解决方案

不知道我的理解,有没有错,欢迎指正。https://segmentfault.com/a/11...

这篇关于javascript - settimeout()的问题的3个疑惑点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆