| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> JS基础知识(三十一):浏览器加载执行JS文件 -> 正文阅读 |
|
[JavaScript知识库]JS基础知识(三十一):浏览器加载执行JS文件 |
文章目录1、js引擎脚本编译:由js引擎编译,即V8引擎(js解释器就是js引擎) V8引擎的用处:chrome浏览器的引擎、Nodejs的运行时环境、electron的底层引擎 js引擎在编译和执行js代码会用到3个重要的组件: 解析器:负责将js源代码解析成抽象语法树AST(通过词法分析、语法分析形成AST) 解释器:负责将AST解释成字节码bytecode,也有直接解释执行bytecode的能力 编译器:负责编译出运行更加高效的机器代码 参考博客:https://www.cnblogs.com/codexlx/p/14179920.html 浏览器下载js文件——词法语法分析——js引擎预编译——js引擎解释执行代码(局部预编译) 参考博客:https://www.dazhuanlan.com/fangyy1/topics/1086590 2、语法分析首先JavaScript的执行过程会先扫描一下整体语法语句,如果存在逻辑错误或者语法错误,那么直接报错,程序停止执行,没有错误的话,开始从上到下解释一行执行一行。(预编译之后进行解释执行,解释一行,执行一行) 3、预编译操作系统分配一段内存——全局预编译——执行script 全局执行环境:添加GO对象的属性 局部执行环境:函数调用时创建AO对象并添加属性 全局执行环境栈底载入栈底——局部执行环境载入栈顶 函数创建时生成作用域链,执行时初始化作用域链 https://blog.csdn.net/pf_frontword/article/details/108385404 3.1 全局预编译创建GO对象(Global Object)全局对象。 3.2 局部预编译创建AO对象(Activation Object)执行期上下文。 3.3 全局对象一个可以在js运行过程当中,由宿主环境提供的,随时随地访问的对象。全局对象在浏览器当中可以被成为window或者self。全局对象带来的是运行时,任意地点,任意元素都可以访问的,这样相当于提供了一个全局的总线模式(不推荐,容易造成命名冲突)。全局对象带来的,是宿主环境提供了一些公共的方法,比如alert,比如history,浏览器是通过window来做基础架构的,然后再window之上去架构自己的DOM方法和实现。 3.4 AO对象函数执行,创建AO对象 3.5 变量对象全局上下文中,变量对象,是全局对象自身 3.6 执行环境https://blog.csdn.net/thumd_lee/article/details/53523744(记得看) JS的运行环境一般由宿主环境和执行期环境共同构成 宿主环境是由外壳程序(如web浏览器就是一个外壳程序)生成,执行期环境是由嵌入到外壳程序中的JS引擎(/JS解释器)生成的,在执行期环境JS可以生成内置静态对象、初始化执行环境等。 执行环境(execution context,为简单起见,有时也被称为“环境”)是JavaScript 中最为重用的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个变量,但解析器在处理数据时会在后台使用它。 全局执行环境是最外围的一个执行环境。在Web浏览器中,全局执行环境被认为是 window 对象,因此所有全局变量和函数都是作为window 对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁(全局执行环境直到应用程序退出——例如关闭网页或浏览器——时才会被销毁)。 局部执行环境,每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。ECMAScript 程序中的执行流正是由这个方便的机制控制着。 https://www.jianshu.com/p/bdf4b035c4a1 https://zhuanlan.zhihu.com/p/50236805 先生成全局执行环境,创建GO对象(GO对象即为变量对象),会创建变量对象的作用域链。栈的底部永远是全局环境,栈的顶部则是处于活动状态当前的执行环境(浏览器总是执行处于栈顶的上下文) 函数调用,局部执行环境被推入执行环境栈,进行局部预编译(创建AO对象,生成局部作用域链)(每次函数的调用都会创建一个执行环境压入栈中,无论是函数内部的函数、还是递归调用等。) 4、解释执行v8将js代码转换为汇编语言,解释一行,执行一行 5、外部脚本的同步加载蓝:文档渲染,紫:加载js文件,黄:执行js 6、外部脚本的异步加载6.1 defer使用:script的属性,只支持外部脚本的加载 缺陷:这种加载方式执行完之前会阻塞onload事件的触发,而现在很多页面的代码都在onload时还执行额外的渲染工作,所以还是会阻塞部分页面的初始化处理。 参考博客:https://www.cnblogs.com/damonFeng/p/8526145.html 13.6.2 async 参考博客:https://blog.csdn.net/lhjuejiang/article/details/81428226 6.3 window.onload和domreadywindow.onload等到页面内包括图片的所有元素和资源加载完毕后才能执行时间点2; 参考博客:https://blog.csdn.net/daponi/article/details/94734683 如有问题,欢迎指正,谢谢~ |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:08:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |