JS的一大特点就是单线程,同一时间只能做一件事。单线程就意味着所有任务需要排队,前一个任务结束,才会执行后一个任务。导致执行时间过长,页面渲染不连贯!
为了解决这个问题,JS出现了同步和异步!
1、同步:前一个任务结束后再执行下一个任务,比如(我们烧水做饭,等水开了【10分钟之后】再去洗菜、切菜)
2、异步:执行一个任务时间很长,再执行这个任务的同时,还可以去处理其它任务,比如(我们烧水做饭,在等水烧开的同时,利用烧水的这10分钟,去洗菜、切菜)
console.log(1);
setTimeout(function() {
console.log(3);
}, 0);
console.log(2);
//打印执行顺序是 1 、 2 、 3
同步任务都在主线程上执行,形成一个执行栈



1、普通事件:比如click、resize等
2、资源加载:比如load、error等
3、定时器:setlnterval、setTimeout等
