# JS中的ECStack、EC、VO 和 AO

浏览器会在计算机内存中分配一块内存,专门用来供代码执行的栈内存,称作执行环境栈 (ECStack) 同时会创建一个 全局对象(GO),将内置的属性方法( isNaN、setInterval、setTimeout... )存放到一块单独的堆内存空间,并且使用 window 指向全局对象。

在执行代码前,还需要创建一个全局执行上下文( EC(G) ), 创建完成后,进入到栈内存中去执行( 进栈); 在当前全局执行上下文中,因为会创建很多变量并且赋值,所以会创建一个变量对象 VO(Varibale Object) 来进行保存,在函数私有上下文中的变量对象叫做 活动对象 AO(Activation Object) (ps: 每个执行上下文都有一个单独的变量对象)

# 名称解释

# 执行环境栈(ECStack):专门用来供代码执行的 栈内存

# 全局对象(GO):存放内置的属性方法,window 指向

# 全局执行上下文( EC(G) ):页面加载后进栈、销毁后出栈

# 变量对象VO(Variable Object): 存放当前执行上下文中创建的变量和值

# 活动对象AO(Activation Object): 函数私有上下文中的变量对象

AO是一个临时的储存容器,函数执行完毕之后,AO会自动销毁的(但是有一种情况例外,那就是闭包)不过闭包会导致内存泄漏。解决内存泄漏,其实很简单,函数执行完毕后在下面设置函数为null比如,foo=null,这样就解决了内存泄漏的问题

Last Updated: 9/12/2023, 6:09:32 PM