javascript 闭包

本文通过作者的独特视角探讨JavaScript闭包的工作原理。介绍闭包如何通过作用域链维持对父级作用域变量的引用,避免垃圾回收机制清除,并保持变量状态,实现模块化等功能。

这里不再码任何代码,关于js闭包的解释(作用域从上至下巴拉巴拉)和表现形式(可以获取到父作用域内定义的的元素巴拉巴拉)以及作用(模块化)网上已经够多,这里我个人对原理认识的角度来谈一下闭包。

首先要对js函数的scope属性有一定了解,在我的另一篇文章里面有提到 js函数的执行过程点击打开链接,当函数被执行时,会根据scope(存储了当前函数被定义时的作用域链)创建一个由上至下的活动对象(存储了当前作用域内定义的变量引用,例如最上级的window的活动对象内存储了全局环境下定义的各种变量)的“链”(举个不是很恰当的例子,想像一下缆车,每个缆车是活动对象,然后缆车线是把他们关联起来的“作用域链”),最上层的活动对象即为全局对象(window/global),最下层的活动对象即为当前执行函数的活动对象,作用域链会将活动对象一级一级关联起来(所以可以一层一层向上查找),正常情况下,当函数执行完毕,这些活动对象都会被gc掉,但是当有闭包的情况下,会出现一个对闭包函数的引用,进而闭包函数不会被销毁,闭包函数的作用域链对其他活动对象的引用依然存在,所以由于存在引用关系,闭包函数的作用域链所引用的活动对象都不会被销毁,所以闭包函数依然可以获取到那些活动对象内的值,进而达到了我们一般理解中闭包的效果。

纯属个人理解,欢迎纠错。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值