Js 是单线程吗?怎么理解单线程?
解:Js是单线程,单线程就是指在一个时间内只能做一件事情。
Js的任务队列是怎样?
解: Js是任务队列分为同步任务和异步任务,一般是同步任务先执行,异步任务放到异步任务栈里,等到同步任务执行才执行异步任务。
案例: console.log(1)
setTimeOut(function(){
console.log(2)
}, 0) // 虽然这里写着0,但是其实最短是4ms.
console.log(3)
输出 // 1 3 2
触发异步的有哪些?
解: setTimeout 和 setInterval 、 dom 事件、 promise.then().
注意:new promise()这里是同步的,在then这里才是异步的。
案例:在页面运行的js在加载的过程中,你去点击页面中的按钮事件,是没有反应的。因为这里dom事件是异步事件,造成以为卡死情况。而js运行加载同步执行完成之后才会执行。
异步任务是怎么放进主线程的呢?
解: 同步任务是放进主线程,而异步任务是放在了任务队列里,一般是任务队列通知主线程,里面的哪个异步任务可以执行了,然后该任务才会放进主线程。然后异步任务又分为宏任务和微任务。当同步任务执行完,会先执行微任务,执行完成再执行宏任务。
宏任务:setTimeout、script、setInterval.
微任务: promise.then、promise.nextTick(node)
Event loop.
网友评论