概述
一、为什么js执行时会阻塞后续页面的内容(包括页面的渲染、其它资源的下载)
通常来说,js在载入后会马上执行(没有动用window.onloaddocmuemtrrady等事件),而浏览器需要一个稳定的DOM树结构,为了防止js修改DOM树,浏览器就会在js执行时阻塞后续页面的内容。
JS运行在浏览器中是单线程的,在某个特定的时刻,只有特定的代码能够执行,并且阻塞其他代码的执行。而浏览器是事件驱动的,浏览器中很多行为是异步的,会创建事件放在执行队列中。Javascript引擎是单线程处理它的任务队列,所以当多个事件触发时,会依次放入队列,然后一个个响应。
浏览器是多线程的,虽然JS运行在浏览器中,是单线程的,但是浏览器不是单线程的。浏览器中的很多异步行为都是由浏览器新开一个线程去完成的。Javascript引擎线程是浏览器多个线程中的一个,它本身是单线程的。浏览器还包括很多其他线程,如界面渲染线程,浏览器事件触发线程,Http请求线程等。所谓的javascript是单线程的,是指javascript运行在浏览器中是单线程的,叫做javascript引擎线程。
二、js代码的运行
1.预解析阶段
浏览器会先把所有函数定义提前,所有变量声明提前(let和const声明不会提升),变量的赋值不提前。
2.执行阶段
从上到下执行(按照js运行机制)。
最后
以上就是勤恳水杯为你收集整理的js预解析和执行阶段浅谈【2021.10.13】的全部内容,希望文章能够帮你解决js预解析和执行阶段浅谈【2021.10.13】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复