SQL注入学习笔记
SQL注入学习笔记
Google V8是如何执行一段JavaScript代码的
本文主要是对一些老生常谈的JavaScript特性进行一个简单的统一的总结,并对于V8如何实现这些特性的进行一定的解释。
主要目的是通过介绍V8的执行流程将耳熟能详的特性串到一起,形成一个整体的认知,以及为什么JavaScript要这样设计。
中间会穿插一些思考,比如,我们在编码中应该避免的一些问题。
我们都知道,JavaScript 是一门自动垃圾回收的语言,也就是说,我们不需要去手动回收垃圾数据,这一切都交给 V8 的垃圾回收器来完成。V8 为了更高效地回收垃圾,引入了两个垃圾回收器,它们分别针对着不同的场景。
我们就来一起分析下,这两个回收机制的使用场景以及工作原理。
上一篇博客我们讲了V8的整体执行的流程,这次我就继续总结下,V8是如何实现对象上属性的快速查找的。
注意,这部分内容不是作用域链,也不是原型链。作用域链是用来找到对象的,如obj,原型链是如果obj上没有属性a,去它的原型上找,而本文的主题,是如何快速在obj上找到a。
这周在极客时间上买了李兵老师的另一门课,关于Google V8原理简介的课程。很多知识点,包括V8的整体执行流程,变量是如何存储的,对象是如何快速检索属性的,函数是如何编译的,闭包是如何实现的,不同的调用方法是是如何影响堆栈的分布的等。
感觉内容很多,就继续原本的系列,这一次总结下我看完以后对V8执行JavaScript的流程的理解。
使用React也有两个月了,总结下这两个月在实战中以及自己买的课程中的关于React Hook的一些收获。
上一个博客大概讲了下babel-parser的工作流程,主要有两个内容,一个是Tokenizer把代码字符串拆分成Token数组,一个是parser把Token数组转换为AST树。
这一次就来仔细看看Tokenizer的逻辑。
上一篇文章分析 Babel 编译流程的时候,提到 Babel 会将 JS 代码转换成 AST(抽象语法树)。这种行为是一种通用的行为,无论什么编程语言都会将源代码解析成 AST,AST 不是 Babel 特有的,更不是 JS 特有的。
为什么要这么做呢?原始的 JS 文件是计算机是无法理解的,计算机也很难直接修改 JS 代码,但是转换成 AST 后,由于 AST 本质上是一组表示程序结构的对象,我们可以通过修改这个对象,间接的实现修改代码的目的。chrome V8 引擎也是这么做的,比起 Bable 更进一步的是,V8 引擎会编译 AST 生成字节码。
Parser的过程分为两步,第一步,词法分析,也就是编译原理中的有限状态机,将一段代码拆分为一个个Token,第二步,语法分析,将Token数组,转换为AST树。
这次我就看一下源码,简单分析一下这个过程。
最近接触了一点关于Babel的知识,产生了一些兴趣,于是就打算看一看Babel的原理,然后总结学习下,这东西太复杂了,就分多个博客来写吧,这篇博客主要讲两件事,第一,简单描述下Babel的工作流程,第二,简单介绍下Babel的项目结构,也就是微内核模式。