最近发现一个误区,以前老是认为setTimeout方法里边传入函数会在自己规定的时间内自动执行,结果不是,请看下边的例子:
(function actions () {
let timer
clearTimeout(timer)
let end
let star = new Date()
console.log('star'+star.getTime())
timer = setTimeout(function () {
end = new Date()
console.log('end'+end.getTime())
}, 1000)
for (let i = 0; i < 1000000000; i++) {
i++
}
})()
可以把上边的代码考到自己的终端中看一下,我这里执行后得到两个时间:
star=1541132508796
end=1541132525577
两个时间相减得到:16781(16秒多)
问:我明明设置的是1秒后执行,为什么隔16秒才给我执行?
答:其实这个是由于setTimeout方法是异步的(js执行本身也是用单线程去执行),在等待过程中,程序会去执行setTimeout方法后边的内容,如果后边的内容没有结束,setTimeout里边的函数执行就会等待。