同步代码与异步代码
js是一个单线程的编程语言,在执行过程中,通常按顺序往下执行,这种我们称之为同步代码。但是如果有些事情并不需要现在进行,比如我们可以post一条数据,在返回数据后自动调用回调的函数,这种情况就是属于异步代码了。
异步代码
异步代码又分为宏任务和微任务。
微任务有nextTick,Promise,MutationObserver等等
宏任务有setinterval,setTimeout等等。
由于属于基础教程,所以提供一个简单粗暴的结果:微任务听着就比宏任务小,所以微任务先执行,宏任务后执行。
我们来看一个demo
console.log('主线程1')
new Promise(function(resolve, reject){
console.log('创建Promise,也属于主线程')
resolve('1')
}).then(function (data2){
console.log('then属于微任务')
})
console.log('主线程2')
setTimeout(()=>{console.log('宏任务')},0)
我们首先console
然后进入new promise,在new Promise的时候由于是创建Promise的过程,所以属于同步代码,会正常输出一个console
然后resolve了这个promise
then注册到了这个promise上,属于一个微任务。
往下在主线程搞了console输出
然后碰到了setTimeout,这是一个宏任务
所以代码执行完毕之后任务队列还有
then以及setTimeout
then属于微任务优先执行,所以先执行then,后执行setTimeout。
那么到这里你已经强行记下了宏微任务了!
常用的很多代码和骚操作其实都基于这个的,如果下次你碰到类似的代码就可以解释了。
结语
撒花~