let oJ = 12;
console.log('1--');
let pro = new Promise(function(resolve, reject){
console.log('2--');
setTimeout(function(){
console.log('3--');
}, 0);
if(oJ === 12){
resolve();
}else{
reject();
}
})
console.log('4--');
pro.then(function(){
console.log('ok');
}, function(){
console.log('fail');
});
setTimeout(function(){
console.log('5--');
}, 0);
</script>
/*
执行结果:
1–
2–
4–
ok
3–
5–
*/
执行该结果的原因:
第一个console.log(1)是同步任务,直接执行,
遇到new Promise内部的console.log(2)是同步任务,直接执行,
遇到setTimeout是宏任务,加入宏任务的event table中,并注册函数,当时间片执行结束,再将该回调函数加入event queue中,
遇到console.log(4)是同步任务,直接执行,
遇到pro.then是微任务,加入微任务的event queue队列中,
遇到setTimeout是宏任务,加入宏任务的event table中,并注册函数,当时间片执行结束后,加入event queue,
此时,同步任务已经执行完毕,找到微任务的event queue,然后执行,则执行console.log(‘ok’),微任务event queue中已经没有任务,开始执行宏任务的event queue,由于时间片已经轮转完毕,执行回调函数,console.log(3),再执行console.log(5)`遵循FIFO`
### [](
)宏任务和微任务
**宏任务:** 例如`setTimeout`和`setTimeInterval`
**微任务:** 例如`promise.then()`和`process.nextTick()`
console.log(‘1’);
setTimeout(function() {
console.log('2');
process.nextTick(function() {
console.log('3');
})
new Promise(function(resolve) {
console.log('4');
resolve();
}).then(function() {
console.log('5')
})
})
/*
执行顺序:
1
2
4
3
5
*/
解释结果顺序:
执行同步任务,1输出,
setTimeout加入宏任务的event table中,并注册函数,等时间片结束后进入宏任务的event queue,
此时同步任务执行完毕,且没有微任务,执行宏任务的event queue,
console.log(2)同步任务执行输出,process加入微任务的event queue队列中,console.log(4)同步任务输出,then微任务,加入微任务的event queue队列。
宏任务执行完毕,开始执行微任务,process的console.log(3),再执行then的console.log(5),微任务执行完毕,
### React
* 介绍一下react
* React单项数据流
* react生命周期函数和react组件的生命周期
* react和Vue的原理,区别,亮点,作用
* reactJs的组件交流
* 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢
* 项目里用到了react,为什么要选择react,react有哪些好处
* 怎么获取真正的dom
* 选择react的原因
* react的生命周期函数
* setState之后的流程
* react高阶组件知道吗?
* React的jsx,函数式编程
* react的组件是通过什么去判断是否刷新的
* 如何配置React-Router
* 路由的动态加载模块
* Redux中间件是什么东西,接受几个参数
* redux请求中间件如何处理并发
**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://ali1024.coding.net/public/P7/Web/git)**

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/169599.html