Javascript的执行机制:
1.理解JS的单线程:
JavaScript是典型的单线程,这部分比较抽象。计算机的任务执行有单线程,多线程之分。单线程是在同一时刻只能做一件事,多线程就是同一时刻能做好几件事。就像我们去水房打水,假如只有一个水龙头,那就需要排队依次打水;如果有很多个水龙头,那就可以同时好几个人打水。为什么JavaScript是单线程?用户在进行页面信息修改时,只能进行增删改查其中一项,不能同时进行多项。如果用户在更改信息的同时,进行了删操作,浏览器该执行哪一项操作,这会造成后台数据紊乱,为了避免这一问题,JavaScript只能是单线程。这是JavaScript的核心特征,也是保证JavaScript能够正常运行的唯一方式。
2.任务队列(消息队列)
单线程就意味着,所有问题都需要排队,前一个任务执行完了,后一个任务才会执行。如果前一个任务执行时间很长,后一个任务就不得不进行等待。为了解决单线程这一问题,将所有任务分为两种:
1)同步任务
2)异步任务
同步任务指的是在主线程上执行的任务,按单线程的规则依次执行任务。当主线程的任务执行完毕后,一部分任务进入任务队列,只有任务队列通知主线程可以执行异步任务了,主线程才会调取异步任务执行。
3.理解Event Loop
异步执行的运行机制
1)所有同步任务都在主线程上执行,形成一个任务栈。
2)在主线程之外,还存在一个“任务队列”。只要异步任务有了运行结果,就在“任务队列”中放置一个事件。
3)一旦“任务栈”中的所有同步任务执行完毕,系统就会读取“任务队列”,看看里面有哪些事件。那些队形的异步任务,结束等待状态,进入任务栈,开始执行。
4)主线程会不断重复执行上面的第三步。
4.放入异步执行队列的语句
1)setTimeOut 和 setInterval
2)DOM事件
3)ES6中的promise
4)Ajax异步请求
每日小结:好好休息,不掉头发