关于js闭包的基础理解
2024-10-22 04:24:03
闭包
拿一个可以记录函数调用次数的来进行理解,如下方
let n = 0
function numUp(){
n++
console.log(n)
}
const fn = numUp()
fn() // n=1
fn() // n=2
n+=10
fn() // n=13
很明显可以发现,我们定义了一个全局变量n来记录numUp函数的调用次数,但是全局变量n在遭到numUp函数之外的改变后,n并不能正确的反映出numUp函数的调用次数,因此我们需要引用闭包的概念
function numUp(){
let n=0
function numRise(){
n++
console.log(n)
}
return numRise
}
const fn = numUp()
fn() // n=1
fn() // n=2
n+=10
fn() // n=3
不难发现当我们使用了闭包也就是函数嵌套的形式去记录函数调用的次数时,则不会在受到函数之外的程序的干扰,其核心就在于实现了数据的私有制,函数外部只能使用私有数据,而不能修改私有数据,因此该类数据可以完完全全地被正确的使用。
但闭包也会引起内存泄露,众所周知,全局变量是不会被销毁的(除非关闭页面),而一般来说一个普通的函数在使用后自身以及自身内部的临时变量(局部变量)都会被销毁,但是在上述闭包形式的写法中,我们定义了一个全局变量fn来引用函数numUp,而numUp函数返回值为内部函数numRise,而numRise内部又可以找到外部变量n,因此此时的n将不会被回收销毁,因此在此处引起了内存泄露。
最新文章
- [c++] Operator overloading
- selenium定位页面元素的一件趣事
- Liferay7 BPM门户开发之41: Expando API入门
- [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象
- DSP bootloader学习笔记1
- 【技术帖】解决 Hudson jenkins 连接等待中 - Waiting for next av
- hibernate ——helloWorld程序(XML配置)
- XMind入门教程
- 玩转Leveldb原理及源码--拙见1
- zookeeper权限问题
- element-ui MessageBox的bug
- JAVAC 命令详解
- C语言中常用的字符串操作函数
- case when then end
- nodejs 服务器实现区分多客户端请求服务
- POJ2286 The Rotation Game[IDA*迭代加深搜索]
- 常见的sql server 链接问题------持续更新
- SpringAop之日志管理
- iOS-tableView会卡顿
- beego——构造查询