settimeout 第一传参是执行代码和函数的问题

1、今天试了下settimeout这个方法,发现第一个传参是函数和执行代码,效果不一样

for( var i = 0; i < 5; i ++ ){
    setTimeout(()=>{
      console.log( i );
    },2000)
}
输出 5个5

for( var i = 0; i < 5; i ++ ){
    setTimeout(console.log( i ),2000)
}
输出 01234

2、我的猜想是第一个传参是先预读了,第一种方式是函数,所以函数内部代码没有预读,第二个是执行代码,预读了然后延时执行?不知道我的猜想对不对?

阅读 2.1k
3 个回答

试一下这个

for( let i = 0; i < 5; i ++ ){
    setTimeout(()=>{
      console.log( i );
    },2000)
}
for( let i = 0; i < 5; i ++ ){
    setTimeout(console.log( i ),2000)
}

第一个for循环执行完才会执行定时任务,那是i是5,所以打印都是5.

第二个没有定时任务,console.log是直接执行的,所以是012345.

settimeout里面的方法是立即执行的,第二个里面是同步操作,所以输出01234并且没有延时执行的,你可以看一下是直接输出的。第一个函数里面是进行异步操作,for循环已经执行完了才进行console.log

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏