如果setTimeout中放普通函数,是正常的事件循环机制,setTimeout中的代码会在主线程中代码执行完后再执行,如下代码:
console.log('start')
setTimeout(function(){
console.log('setTimeout')
},0)
console.log('end')
输出结果:
但是如果我把普通函数改成立即执行函数的话,即改成下面这样:
console.log('start')
setTimeout((function () {
console.log('setTimeout')
})(), 0)
console.log('end')
输出结果:
我想问的问题就是下面这种使用立即执行函数的情况,setTimeout就不会放在异步事件队列中吗,还是说因为有立即执行函数,会先去异步事件队列中运行函数再回主线程呢?谢谢解答。
你既然都知道叫立即执行函数了,"立即执行"从字面上看不懂意思吗,它不用等回调,代码加载就立即执行。
按你第二种写法,setTimeout收到的参数实际是你那个立即执行函数的返回值,也就是
undefined
可以试下运行这段,给立即执行函数
return
一个function
,setTimeout
执行的是这个function