请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于settimeout的问题

请问下老师

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

setTimeout((function(i){

console.log(i)

})(i), i*1000);

}

settimeout 第一个参数传递立即执行函数,在被放入栈之后也会立即执行而不会等待延迟执行?

正在回答

2回答

setTimeout的第一个参数可以接收函数或者是用字符串代替function。而这里传入的立即执行函数会立即执行,其返回值是undefined,相当于setTimeout(undefined, i*1000),它不会进入等待执行的队列,并且会报错。 所以会立即输出01234

1 回复 有任何疑惑可以回复我~
双越 2018-03-13 09:25:57

是否立即执行,那得看 setTimeout 第二个参数啊,即延期时间

0 回复 有任何疑惑可以回复我~
  • 提问者 寂寞追不上我 #1
    老师请问下,因为第一个参数是立即执行函数但没有返回值,所以相当于传的第一个参数是undefined,所以会报错,然后立即输出0~4,可以这样理解吗?
    回复 有任何疑惑可以回复我~ 2018-03-13 20:10:44
  • 双越 回复 提问者 寂寞追不上我 #2
    首先,setTimeout 的第一个参数必须是一个函数,不能是 undefined
    回复 有任何疑惑可以回复我~ 2018-03-13 20:35:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信