## js语言特点
单线程 解释性语言
## event-loop
事件循环机制由三部分组成
调用栈 微任务队列 消息队列
+ event-loop开始的时候 会从全局一行一行的执行 遇到函数调用 会压入到调用栈中 被压入的函数称之为帧 当函数返回后会从调用栈中弹出
function fun1(){
console.log(1)
}
function fun2(){
console.log(2)
fun1()
console.log(3)
}
fun2()
结果为: 2 1 3
+ js中的异步操作 比如fetch setTimeout setInterval 压入到调用栈中的时候 里面的消息会进入到消息队列中去 消息队列中会等到调用栈清空后再执行
function fun1(){
console.log(1)
}
function fun2(){
setTimeout(()=>{
console.log(2)
},0)
fun1()
console.log(3)
}
fun2()
结果为: 1 3 2
+ promise async await的异步操作的时候会加入到微任务中去 会在调用栈清空的时候立即执行 调用栈中加入的微任务会立马执行
var p = new Promise(resolve => {
console.log(4)
resolve(5)
})
function fun1() {
console.log(1)
}
function fun2() {
setTimeout(() => {
console.log(2)
}, 0)
fun1()
console.log(3)
p.then(resolve => {
console.log(resolve)
})
}
fun2()
结果: 4 1 3 5 2
+ 面试题
let p = new Promise(resolve => {
console.log(1)
setTimeout(() => {
console.log(2)
resolve(3)
console.log(4)
}, 0)
})
setTimeout(() => {
console.log(5)
}, 0)
p.then(resolve => {
console.log(resolve)
console.log(6)
})
console.log(7)
结果:1 7 2 4 3 6 5