javascript之闭包基础和注意点
时间:2022-07-22
本文章向大家介绍javascript之闭包基础和注意点,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
闭包是JavaScript必须了解的一个知识点。
什么是闭包?
闭包就是值有权访问另一个函数作用域中的变量的函数,常见的方式就是:在一个函数内部创建另一个函数,并把这个函数作为返回值。
代码部分:
function adolescent(ages) {
var age=24;
//返回一个匿名函数
return function (additional) {
return age+ages+additional;
}
}
var adult = adolescent(1);//获取到返回的函数
var result = adult(2);//执行函数
首先创建了一个函数adolescent,然后返回了一个匿名函数,匿名函数中则使用了局部变量age和ages,由于js的作用域链的关系,所以是可以访问父级函数的变量。
然后在匿名函数中使用了父级作用域的变量,在返回这个函数。
然后我们执行adolescent函数,获取到返回的匿名函数,在这里的作用域是全局作用域,然后却用到了局部的变量,这就是闭包。
最后用了变量adult接受这个匿名函数,然后执行。
闭包在我们开发就会不知觉用到,也许你自己都还不知道。
注意点:
过度使用闭包会占用更多内存。
一般情况下,在函数执行完毕后,其中的局部变量都会自动销毁,内存中仅保存着全局作用域的变量对象。
但是在另一个函数内部定义的函数(也就是闭包)会包含父级函数的作用域的变量对象。
就拿上面的代码说:返回的是一个匿名函数,这个函数就包含了adolescent函数的作用域对象,所以当adolescent执行完后,他的作用域上的变量仍然存在内存中。
由于上述使用了adult变量来接受这个函数,而这个变量在全局变量中,所以内存不会释放,所以我们只有手动释放内存,即在最后把adult的引用设置为null就可以释放内存。
adult=null;//手动释放内存
闭包是依靠了js的作用域链的特性而来的。
闭包的应用的地方还是非常多的,需要大家灵活应用,最重要的是要考虑到释放内存
如无作者授权,请勿转载。
- python 实现数据降维推荐系统(附Python源码)
- MYSQL数据导出与导入,secure_file_priv参数设置
- numpy 参数(一) —— np.linalg
- 关于查看dba_data_files的一个小问题(r7笔记第72天)
- 一则备库CPU报警的思考(r7笔记第69天)
- Java设计模式-观察者模式
- 今天处理的三个小问题——20160120(r7笔记第84天)
- 主备切换的准备工作(r7笔记第83天)
- Java设计模式-外观模式
- Java设计模式-组合模式
- 使用shell批量监控磁盘坏块(二) (r7笔记第80天)
- JavaWeb10-request&response你不得不学(1)
- dg的奇怪问题终结和分区问题答疑 (r7笔记第77天)
- 最近让我焦灼的四个问题(有解) (r7笔记第76天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中实现长按照片弹出右键菜单功能的实例代码
- Android Studio无法执行Java类的main方法问题及解决方法
- PlayTube优秀的视频CMS系统/支持本地和youtube导入
- Android Studio 中运行 groovy 程序的方法图文详解
- android studio按钮监听的5种方法实例详解
- AndroidStudio3.6.1打包jar及AndroidStudio4.0打包jar的一系列问题及用法
- 教你如何在js中split函数分割字符串为数组
- [折腾]小型HTTP web服务Caddy及配置PHP
- graftcp一种把指定程序的 TCP 流量重定向到代理的方法
- Flutter应用集成极光推送的实现示例
- android调用C语言实现内存的读取与修改的方法示例
- Android中网络框架简单封装的实例方法
- Auto Remove Torrents:自动删种程序部署
- OpenVZ平台Alpine Linux一键安装脚本
- 使用holder.js生成美观的网页占位图