![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JavaScript
文章平均质量分 56
浏览器中的JavaScript执行机制5讲、V8工作原理3讲
Mme.Y
这个作者很懒,什么都没留下…
展开
-
06_V8执行JS代码
一. 编译器 vs 解释器 编译型语言: 在程序执行之前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件。 每次运行程序时,直接运行该二进制文件,而不需要再次重新编译。 如 C/C++、GO 等语言 解释型语言: 在每次运行时都需要通过解释器对程序进行动态解释和执行。 如 Python、JavaScript 等语言。 编译器 运用于编译型语言 依次对源代码进行词法分析、语法分析,生成抽象语法树(AST),然后是优化代码,最后再生成处理器能够理解的机器码。 如果编译成功,原创 2021-10-18 17:57:25 · 138 阅读 · 0 评论 -
05_内存机制
一. JS的数据类型 JavaScript是一种弱类型的、动态的语言 弱类型:支持隐式类型转换的语言,与强类型对应 动态语言:在运行过程中需要检查数据类型的语言,与静态语言对应 原始类型 Boolean Null Undefined Number String Symbol BigInt 引用类型 Object 二. 内存空间 代码空间 栈空间 调用栈 原始类型的数据值直接保存在栈中 原始类型的赋值会完整复制变量值 堆空间 引用类型的值存放在堆中 引用类型的赋值是复制引用地址 // 原始原创 2021-10-17 17:11:34 · 61 阅读 · 0 评论 -
04_this
this this 和执行上下文绑定 全局执行上下文中的this 指向 wihdow 对象 函数执行上下文中的this 默认情况调用函数,其执行上下文的this也是指向window对象 设置this指向 函数 call 方法 let bar = { myName : " 极客邦 ", test1 : 1 } function foo(){ this.myName = " 极客时间 " } foo.call(bar) console.log(bar) // {myName: ' 极原创 2021-10-17 17:09:02 · 83 阅读 · 0 评论 -
03_作用域链和闭包
作用域链 通过outer去执行上下文中查找外部变量的链条 outer:外部引用,存在于每个执行上下文的变量环境中,指向外部的执行上下文 词法作用域链 作用域是由代码中函数声明的位置来决定的,所以词法作用域是静态的作用域,通过它就能够预测代码在执行过程中如何查找标识符 词法作用域是代码阶段决定的,和函数调用没有关系 let count = 1 function main(){ let count = 2 function bar(){ let count = 3原创 2021-10-17 17:08:17 · 47 阅读 · 0 评论 -
02_JS栈溢出
函数调用 运行一个函数,函数名+() 过程 为整段代码创建全局执行上下文 执行代码 遇见函数调用,取出函数代码并进行编译,创建函数执行上下文和可执行代码 执行代码 注意:在执行过程中会出现多个执行上下文 调用栈 管理执行上下文的数据结构,也称执行上下文栈,先进后出 追踪函数执行的机制 不断的将执行上下文压栈,代码执行完毕后就出栈 栈溢出 调用栈是有大小的,入栈的执行上下文超出一定数目就会报错,即栈溢出 学习资料 李兵:《08丨调用栈:为什么JavaScript代码会出现栈溢出?》原创 2021-10-17 17:06:30 · 259 阅读 · 0 评论 -
01_JS执行顺序
声明和赋值 变量的声明和赋值 var name = 'xy'; // 等价于 var name; // 变量声明 name = 'xy'; // 变量赋值 函数的声明和赋值 // 完整函数变量声明 function foo = function(){ console.log('foo'); } var foo; // 先声明变量 // 后赋值 foo = function(){ console.log('foo'); } 变量提升 JS代码执行过程中,把变量的声明部分和函数原创 2021-10-17 17:05:26 · 93 阅读 · 0 评论