直译语言(Interpreted Language)
javascript就是直译式语言,会直接透过直译器,将代码生成出来,才在运行环境执行。并且如果有错误的状况会直接在运行环境作回馈。
而直译式语言的优点就是不需要预先订义型别,并且弹性较高。
而跟直译式语言相对的就是,编译式语言。
编译式语言在送到执行环境之前,会进行一段编译的过程,这时候如果有错的话,就会在编译的过程中出现错误回馈。
这就是编译式语言的好处,另外同时编译式语言大部分的效能都会稍微好一些。
Javascript 直译器转换过程
语法基本单元化(Tokenizing)抽象结构树 AST(Abstract Syntax Tree)代码生成语法基本单元化(Tokenizing)
语法基本单元化就是将特定的变数宣告进行字串的拆解
例如
var ji = '吉';
上述的变数定义,对直议器来说并不会知道 var 是变数的宣告方式,ji 是变数名称。
在这个步骤就是依序分解成不同的物件区块(Token),并且给予不同的 Token 不同的识别名称。
抽象结构树 AST(Abstract Syntax Tree)
抽象结构树会依照刚刚的 Token 的结果产生类似 JSON 格式的阶层列表出来
可以看到kind的地方则是宣告变数的方式
并且可以发现是一个 VariableDeclaration 的动作
但到这个部分都还没有真正运行,要到特定的环境才会运行(chrome或是Node.js)
另外可以注意的地方是,如果没有用 var let const 这些宣告变数的宣告词,则 AST 就不会是 VariableDeclaration。
而是 AssignmentExpression
好~之后就是代码生成,并且将代码丢到运行环境进行运行噜~!
今天的笔记就到这边 ~! 汪汪
线上工具 Esprima : https://esprima.org/demo/parse.html#