闭包与原型链的理解

本文介绍了JavaScript中的闭包和原型链概念。闭包是一个内部函数被外部引用时形成的状态,可以保持内部变量长时间存储在内存中。利用闭包可以避免全局变量污染。原型链则是通过对象的__proto__属性形成的链式查找机制,用于访问对象的属性,当对象自身没有某个属性时,会沿着原型链向上查找,直到找到null为止。prototype属性则用于共享函数实例的属性和方法。
摘要由CSDN通过智能技术生成

简单闭包的理解:

function A(){
function B(){
console.log(‘Hello Closure!’);
}
return B;
}
var C = A();
C();// Hello Closure!
这是最简单的闭包。

有了初步认识后,我们简单分析一下它和普通函数有什么不同,上面代码翻译成自然语言如下:

定义普通函数 A
在 A 中定义普通函数 B
在 A 中返回 B
执行 A,并把 A 的返回结果赋值给变量 C
执行 C
把这5步操作总结成一句话就是:

函数A的内部函数B被函数A外的一个变量 c 引用。

把这句话再加工一下就变成了闭包的定义:

当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。

因此,当你执行上述5步操作时,就已经定义了一个闭包!

这就是闭包。

闭包的用途
在了解闭包的作用之前,我们先了解一下 Javascript 中的 GC 机制:

在 Javascript 中,如果一个对象不再被引用,那么这个对象就会被 GC 回收,否则这个对象一直会保存在内存中。

在上述例子中,B 定义在 A 中,因此 B 依赖于 A ,而外部变量 C 又引用了 B , 所以A间接的被 C 引用。

也就是说,A 不会被 GC 回收,会一直保存在内存中。为了证明我们的推理,上面的例子稍作改进:

function A() {
var count = 0;
function B() {<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值