为什么需要JavaScript引擎
高级编程语言都需要转换成最终的机器指令来执行
事实上我们编写的JavaScript无论交给浏览器或者Node执行,最后都是需要被CPU执行的
所以我们需要JavaScript引擎帮助我们将JavaScript代码翻译成CPU指令来执行
浏览器内核和JS引擎的关系
这里我们以WebKit为例,WebKit事实上由两部分组成:
WebCore:负责HTML解析、布局、渲染等等相关的工作
JavaScriptCore:解析、执行JavaScript代码
变量环境 与 记录
VO(Variable Object)变量对象 在最新的ECMA标准中,VO已经有另外一个称呼了变量环境 VE GO(Clobal Object)全局对象,全局执行上下文 AO(Activation Objece)包括了函数执行上下文
JS的内存管理
JavaScript会在定义变量时为我们分配内存; JS对于基本数据类型内存的分配会在执行时,直接在栈空间进行分配; JS对于复杂数据类型内存的分配会在堆内存中开辟一块空间,并将这块空间的指针返回值变量引用
JS的垃圾回收
因为内存的大小是有限的,所以当内存不再需要的时候,我们需要对其进行释放,以便腾出更多的内存空间
垃圾回收的英文是 Garbage Collection 简称GC; 对于那先不再使用的对象,我们都称之为是垃圾,它需要被回收,以释放更多的内存空间; 而我们的语言运行环境,比如java的运行环境JVM,JavaScript的运行环境js引擎都会内存垃圾回收器; 垃圾回收器我们也简称GC,所以哎很多地方你看到 GC其实指的是垃圾回收器
深入闭包
在计算机科学中对闭包的定义(维基百科): 闭包(英语:Closure),又称词法闭包(Lexical Closure) 或函数闭包(function closures); 是在支持头等函数的编程语言中,实现词法绑定的一种技术; 闭包在实现上是一个结构体,它存储了一个函数和一个关联的环境(相当于一个符号查找表); 闭包跟函数最大的区别在于,当捕捉闭包的时候,它的自由变量会在捕捉时被确定,这样即使脱离了捕捉时的上下文,它也能照常运行