WARNING
由于初学这方面内容,可能存在大量的理解错误,没地方写,单纯拿这里当笔记本了,请勿当作参考
执行环境
js代码所运行的环境,通常是浏览器引擎等,用于初始化各种空间以及堆栈等等。
执行环境栈
页面在渲染后,会初始化一片内存空间放置一个执行环境栈ECS,用于代码的执行
执行上下文
方便在不同代码作用域得代码相互隔离
VO/VOG
全局变量对象,用于存在全局上声明的对象
ECG
全局执行上下文,包含VOG以及全局执行代码
当ECG完成后会回收代码空间以及基础数据类型空间
对象的回收取决于GC回收机制
Go
Go为全局对象,Go包含了我们windows下的一些常用操作函数,如Setinterval等,不属于ECS空间内。
代码的过程
代码在运行时首先会被Sacnner扫描为最小token化
然后进行预编译,不编译具体代码,仅编译作用域等做sharkingtree操作后进行编译
然后转化为字节并且运行
对象
对象创建于堆内存中,在vog为引用内存地址形式存在
EC
函数私有上下文
AO
私有函数上下文变量存储对象
函数初始化操作
确定作用域链
确定this
初始化arguments
形参赋值
变量提升
执行代码
创建函数
创建函数与变量类似
淡出开辟一个堆内存存放字符串形式代码
创建函数的时候它的作用域scopt已经确定了
即创建函数所在时的执行上下文
创建函数后将内存地址与对应函数名进行关联