JavaScript是一门单线程语言,UI渲染,脚本执行都使用同一个线程。
setTimeout是很多人喜欢用的延迟执行函数,如
setTimeout(function() {
console.log('Hello World');
}, 3000);
我们会认为程序在三秒后执行Hello World
,但实际上又可能会超出三秒,并且时间不固定。前面说了,JavaScript是单线程,所有异步执行的函数都会被压入一个Event Table
,只有主线程空闲的时候才会从Event Table
取出函数执行,Event Queue
是一个list,每次主线程空闲就从Event Queue里取出第一个函数执行
setTimeout(function() {
console.log('Hello World');
}, 3000);
for (let i = 0; i < 10000000; i++) {}
比如以上程序,虽然先执行setTimeout
并在延迟3秒后执行,但到下边的语句占用了一些时间,所以实际上setTimeout函数执行远超3秒