变量提升与执行上下文,
变量提升 (预处理)
js引擎在代码正式施行前会做一个预处理的工作:
1.收集变量
2.收集函数
变量提升的原理即是html中的执行上下文概念
执行上下文(execute context) EC
理解:代码执行的环境
时机:代码正式执行前会进入到执行环境
工作:
1.创建变量对象:
1)变量
2)函数及函数的参数
3)全局:window
4)局部:抽象但确实存在的对象
2.确认this的指向
1)全局:this -----》 window
2)局部:this ------》 调用的对象
3.创建作用域链(事实上在代码编译阶段就创建了)
父级作用域链 + 当前的变量对象
4.扩展:
ECObj = {
变量对象:{变量 , 函数 , 函数的形参 }
scopeChain:父级作用域链 + 当前的变量对象,
this:{ window || 调用的对象}
}
宏任务
分类:setTimeout setInterval requrestAnimationFrame(ie)
1.宏任务所处的队列就是宏任务队列
2.第一个宏任务队列中只有一个任务:执行主线程的js代码
3.宏任务队列可以有多个
4.当宏任务队列中的任务全部执行完以后会查看是否有微任务队列,如果有先执行微任务队列中的所有任务,如果没有就查看是否有宏任务队列
微任务
分类: new Promise( ) . then( 回调 ) process.nextTick
1.微任务所处的队列就是微任务队列
2.只有一个微任务队列
3.在上一个宏任务队列执行完毕之后如果有微任务队列就会执行微任务队列中的所有任务