关于闭包的底层实现原理

本文探讨了JavaScript引擎如何创建Global Object并解释了闭包的诞生条件。在编译阶段,全局变量和函数存储在Global Object中,函数内部引用外部变量形成闭包。执行过程中,函数执行上下文的活动对象(AO)与全局对象(GO)相互作用,实现变量查找。当函数执行完毕,AO会被销毁,但若函数对象未被释放,将导致内存浪费,甚至引发内存泄漏问题。
摘要由CSDN通过智能技术生成

js引擎会在对js代码编译之前,会在堆内存中创建一个Global Object(全局对象)对象内部存储了很多的属性和方法,里面也有window属性,只不过这个window属性的 属性值指向的Global Object(全局对象)  

闭包诞生于: 只要从Global Object(全局对象)这个根对象中能找到一个属性引用着一个函数,而且函数内部引用了外部作用域的变量,那么这个函数与外部被引用的变量绑在一起称为闭包

 比如这里对应着如下图片

在编译阶段 在全局作用域中已经声明的值将会被存储到GO对象中作为属性,且值是undefined。

而对于函数的话,会开辟一个新的内存存储函数对象,内容包括parentScope指向父级作用域,和函数执行体,GO会以引用地址方式来指向函数对象的地址.  这里面的VO是存在与执行上下文的环境当中的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值