JS 中闭包的实例展示和应用
171 浏览量
更新于2024-09-01
收藏 63KB PDF 举报
js中的闭包实例展示
闭包是JavaScript中一个重要的概念,准确来说,闭包是基于正常的垃圾回收处理机制下的。也就是说,一般情况一个函数(函数作用域)执行完毕,里面声明的变量会全部释放,被垃圾回收器回收。但闭包利用一个技巧,让作用域里面的变量,在函数执行完之后依旧保存没有被垃圾回收处理掉。
闭包的定义:MDN定义javascriptkit词法作用域。闭包的三大特点为:
1. 函数嵌套函数
2. 内部函数可以访问外部函数的变量
3. 参数和变量不会被回收。
作用域链:函数在执行的过程中,先从自己内部找变量如果找不到,再从创建当前函数所在的作用域(词法作用域)去找,以此往上注意找的是变量的当前的状态。作用域链的博客函数连同它作用域链上的要找的这个变量,共同构成闭包。
使用闭包主要是为了:
1. 封装数据
2. 暂存数据
一个典型的闭包案例:
function car(){
var speed = 0
function fn(){
speed++
console.log(speed)
}
return fn
}
var speedUp = car()
speedUp()//1
speedUp()//2
在这个例子中,当函数内部没有执行以下的代码时:
function fn(){
speed++
console.log(speed)
}
return fn
在代码执行完成后,函数内部的局部变量speed就会被销毁,由于全局标量speedUp一直存在(除非关闭当前页面,否则全局变量一直存在),那么函数内部的作用域就没有办法被销毁,里面有东西一直被使用,这点与浏览器的垃圾回收机制相仿,当我们执行speedUp(),他会在函数的词法作用域下去寻找,函数里面又返回了一个fn,因而形成闭包,简单的理解为:
var speed = 0
function fn(){
speed++
console.log(speed)
}
这一段代码形成一个闭包,如果不return fn,那函数内部的局部变量就会被销毁。
我们可以看看上述代码利用立即执行语句和立即执行函数可以怎么演变:
function car(){
var speed = 0
function fn(){
speed++
console.log(speed)
}
return fn
}
var speedUp = car()
//1
function car(){
var speed = 0
return function(){
speed++
console.log(speed)
}
}
在这个例子中,我们可以看到闭包的强大之处,它可以让函数内部的变量在函数执行完毕后依旧保存不被销毁,并且可以被外部函数访问和修改。
2012-03-24 上传
2020-11-23 上传
2020-12-09 上传
2019-08-03 上传
2020-10-22 上传
2021-01-19 上传
2020-12-02 上传
2016-12-17 上传
2021-01-21 上传
weixin_38674050
- 粉丝: 5
- 资源: 981
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程