JS执行机制 同步和异步

317 阅读1分钟

JS的一大特点就是单线程,同一时间只能做一件事。单线程就意味着所有任务需要排队,前一个任务结束,才会执行后一个任务。导致执行时间过长,页面渲染不连贯!

为了解决这个问题,JS出现了同步和异步!

1、同步:前一个任务结束后再执行下一个任务,比如(我们烧水做饭,等水开了【10分钟之后】再去洗菜、切菜)

2、异步:执行一个任务时间很长,再执行这个任务的同时,还可以去处理其它任务,比如(我们烧水做饭,在等水烧开的同时,利用烧水的这10分钟,去洗菜、切菜)

     console.log(1);      
     setTimeout(function() {
         console.log(3);
     }, 0);
     console.log(2);
     //打印执行顺序是 1 、 2 、 3

同步任务都在主线程上执行,形成一个执行栈

上诉代码执行机制:1、先执行执行栈的同步任务!

2、异步任务(回调函数)放入任务队列中。执行栈中所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,被读取的异步任务结束等待状态,进入执行栈开始执行!
异步任务是通过回调函数实现的,一般异步任务有三种类型

1、普通事件:比如click、resize等

2、资源加载:比如load、error等

3、定时器:setlnterval、setTimeout等

由于主线程不断地重复获取任务、执行任务、在获取任务、在执行,这种机制被称为事件循环(eventloop)