记录高级js学习(一)js底层

233 阅读1分钟

关于v8引擎的运行js代码原理:

当我们拿到一段js代码后,首先会通过词法分析和语法分析拿到一系列的token,这些token会通过Parse模块合成AST抽象语法树,合成抽象语法树之后通过一个内置的ignation模块将其转化为通用字节码,最后这些通用字节码会转化为不同CPU环境下可执行的机械指令,这样就可以运行了

image.png 至于下面的TurboFan模块是对整个编译流程进行优化,例如一个函数被多次调用,会被TurboFan标记成热函数,由其直接编译成优化后的机器码使用,以提高性能

var变量提升的底层原理:

js代码在编译之前会创建一个golbal object的全局对象(预编译,简称GO对象,也可以说是window对象),这个对象存放着像setTimeout、Date等各种方法和类,以及声明了的变量,其实值均为undefined,还有个window指向它自己。所以在变量声明赋值之前,这个变量实际上已经存在于GO之中了,此时的值为undefined,当代码执行到赋值阶段才有值