6、作用域链:V8是如何查找变量的你好,我是李兵。 在前面我们介绍了JavaScript的继承是基于原型链的,原型链将一个个原型对象串起来,从而实现对象属性的查找,今天我们要聊一个和原型链类似的话题,那就是作用域链。 作用域链就是将一个个作用域串起来,实现变量查找的路径。讨论作用域链...2026-02-27图解 Google V8
7、类型转换:V8是怎么实现1+“2”的你好,我是李兵。 前面我们花了很多篇幅聊了JavaScript中最基础却很容易被忽略的“对象”,以及V8是怎么处理“对象”的,今天我们继续来聊另一个非常基础,同时也是很容易被大家忽略的问题,那就是JavaScript中的“类型系统”。 在理解这个概念...2026-02-27图解 Google V8
8、答疑:如何构建和使用V8的调试工具d8你好,我是李兵。 今天是我们第一单元的答疑环节,课后有很多同学留言问我关于d8的问题,所以今天我们就来专门讲讲,如何构建和使用V8的调试工具d8。 d8是一个非常有用的调试工具,你可以把它看成是debug for V8的缩写。我们可以使用d8来查看V...2026-02-27图解 Google V8
9、运行时环境:运行JavaScript代码的基石你好,我是李兵。 通过前面几节课的学习,我们理解了JavaScript是一门基于对象的语言,它能实现非常多的特性,诸如函数是一等公民、闭包、函数式编程、原型继承等,搞懂了这些特性,我们就可以来打开V8这个黑盒,深入了解它的编译流水线了。 我们知道,当...2026-02-27图解 Google V8
10、机器代码:二进制机器码究竟是如何被CPU执行的你好,我是李兵。 在上一节我们分析了V8的运行时环境,准备好了运行时环境,V8就可以执行JavaScript代码了。在执行代码时,V8需要先将JavaScript编译成字节码,然后再解释执行字节码,或者将需要优化的字节码编译成二进制,并直接执行二进制...2026-02-27图解 Google V8
11、堆和栈:函数调用是如何影响到内存布局的你好,我是李兵。 相信你在使用JavaScript的过程中,经常会遇到栈溢出的错误,比如执行下面这样一段代码: 1234function foo() { foo() // 是否存在堆栈溢出错误?}foo() V8就会报告栈溢出的...2026-02-27图解 Google V8