JS 中闭包的实例展示和应用
114 浏览量
更新于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)
}
}
在这个例子中,我们可以看到闭包的强大之处,它可以让函数内部的变量在函数执行完毕后依旧保存不被销毁,并且可以被外部函数访问和修改。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2019-08-03 上传
2021-01-19 上传
2020-10-23 上传
2012-03-24 上传
2020-11-23 上传
2020-10-25 上传
weixin_38674050
- 粉丝: 5
- 资源: 981
最新资源
- Angular实现MarcHayek简历展示应用教程
- Crossbow Spot最新更新 - 获取Chrome扩展新闻
- 量子管道网络优化与Python实现
- Debian系统中APT缓存维护工具的使用方法与实践
- Python模块AccessControl的Windows64位安装文件介绍
- 掌握最新*** Fisher资讯,使用Google Chrome扩展
- Ember应用程序开发流程与环境配置指南
- EZPCOpenSDK_v5.1.2_build***版本更新详情
- Postcode-Finder:利用JavaScript和Google Geocode API实现
- AWS商业交易监控器:航线行为分析与营销策略制定
- AccessControl-4.0b6压缩包详细使用教程
- Python编程实践与技巧汇总
- 使用Sikuli和Python打造颜色求解器项目
- .Net基础视频教程:掌握GDI绘图技术
- 深入理解数据结构与JavaScript实践项目
- 双子座在线裁判系统:提高编程竞赛效率