CodingWithAlice

我的一方小天地,如果对你有帮助,那真的太好了

14 任务调度系统

14 任务调度系统 任务调度系统 - 组成:消息队列 + 事件循环 为什么渲染主线程需要任务调度系统? 可以看如下图的任务,除了线程之间的相互通信,还有跨进程发送的任务 消息队列中的任务类型 内部消息类型,如输入事件(鼠标滚动、点击、移动)、微任务、文件读写、WebSocket、JavaScript定时器等; 还包含了很多与页面相关的事件,如 JavaScript 执行...

13-2 JS如何影响DOM树的构建

13-2 JS如何影响DOM树的构建 什么是DOM? 渲染引擎无法直接识别网络进程传递的 HTML 字节流,而 DOM 就是能理解的结构 DOM的作用: 1、页面 – DOM是生成页面的 基础数据结构 2、JS脚本 – DOM提供了 JS脚本操作的接口,JS可以修改 DOM 结构、样式、内容 3、安全 – 不安全的内容 在 DOM 解析阶段就...

13 V8如何解析js代码 - 编译器+解析器

13 V8如何解析js代码 - 编译器+解释器 1、语言类型分类 解释型语言 – js、python等,每次都需要 解释器 对程序进行动态解释和执行 编译型语言 – C/C++、GO等,需要编译,编译后生成 二进制文件 并保留,下次可以直接执行 2、概览V8解析一段js代码 流程概括:V8 依据 JavaScript 代码生成 AST 和执行上下文,再基于 AST 生成 字节码,然...

12 垃圾回收机制

12 垃圾回收机制 参考文章:垃圾回收 核心要点记录如下: V8 - 64位系统 —> 1.4GB内存 V8 - 32位系统 —> 0.7GB内存 垃圾数据回收分为两种策略: 手动回收:C/C++(手动分配内存/销毁) 自动回收【垃圾回收器】:js、java、python 内存泄漏:如果这段数据已经不再需要了,但是又没有销毁。 栈 - 垃圾回收机制 提问...

11 栈和堆

11 栈和堆 几个基础概念: 静态语言:在声明变量之前需要先定义变量类型,例如C 动态语言:在运行过程中需要检查数据类型的语言,例如JS 弱类型语言:支持隐式类型转换的语言 强类型语言:不支持隐式类型转换的语言 JS是一种弱类型(不需要提前声明类型,JS在运行代码时自己计算),动态类型(一个变量可以保存多种类型的数据)语言。【热知识:js中字符串不能被修改】 js数据类型 ...

10 执行上下文视角的 this

10 执行上下文视角的 this 作用域链和this是两套不同的体系,唯一的关系是在全局上下文中的this指向window对象,作用域链的最底端包含了window对象 ## this是什么 如下图所示,`this`是和执行上下文绑定的,每个执行上下文中都有一个`this`,按照执行上下文的分类,`this`也可以分为三类: - 全局执行上下文中的`this` 函数执行上...

09 闭包

09 闭包 理论: ​ 在 JavaScript 中,根据 词法作用域 的规则,内部函数总是可以访问其外部函数中声明的变量,当通过调用一个外部函数返回一个内部函数后,即使该外部函数已经执行结束了,但是内部函数引用外部函数的变量依然保存在内存中,我们就把这 些变量的集合称为闭包。 闭包的重点:在函数内部定义其他函数返回!!!不是调用外部作用于域块就能够直接形成的。 闭包优缺点: ...

09 作用域链

09 作用域链 结论:作用域链(outer指向的上一个上下文)由函数声明的位置决定。下面是帮助理解的例子: 先开看一段代码:输出的结果应该是什么? – bye,坑 原因:JavaScript 作用域链是由词法作用域决定的,词法作用域就是根据代码的位置来决定的,详见下文分析 作用域链:JavaScript 引擎首先会在“当前的执行上下文”中查找该变量,如果在当前的变量环境中没有查找...

08 JS如何实现块级作用域

08 JS如何实现块级作用域 总结 块级作用域就是通过 词法环境 的栈结构来实现的,而变量提升是通过变量环境来实现 块级作用域 作用域:指在程序中定义变量的区域,该位置决定了变量的生命周期。 变量提升的缺陷: 变量容易在不被察觉的情况下被覆盖掉 本应销毁的变量没有被销毁 ES6通过引入块级作用域并配合 let、const 关键字解决 变量提升 的问题,作用块内声明的变量...

07 执行栈/调用栈(执行上下文栈)

07 执行栈/调用栈(执行上下文栈) 调用栈定义 在执行上下文创建好后,JavaScript引擎会将执行上下文压入栈中,通常把这种用来管理执行上下文的栈称为执行上下文栈,又称调用栈/执行栈 有三种情况会创建执行上下文 js执行 全局代码 时 – 编译全局代码,并创建全局执行上下文 调用一个 函数 时 – 编译函数,并创建函数执行上下文(函数执行结束后,当前函数执行上下文被销毁)...