闭包
来源:互联网 发布:喜马拉雅 兼职 知乎 编辑:程序博客网 时间:2024/06/04 20:06
闭包就是可以在读取其他函数内变量的函数
在js中,只有读取函数内部的子函数才能读取局部变量,因此可以把闭包理解为 ‘定义在一个函数内部的函数’
本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁
实例代码:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="https://code.jquery.com/jquery-3.2.1.js"></script> <style> </style></head><body><div id="parent"> <div id="child" class="child"></div></div><script> $(function(){ function f1(){ var num=1; add=function(){num+=1}; function f2(){ console.log(num) } return f2; } var result=f1(); result(); add(); result(); })</script></body></html>
以上代码中,result实际上就是闭包 f2 函数。两次结果为 1 2,证明函数 f1 中的局部变量 num 一直保存在内存中,并没有在 f1 调用后被自动清除
解析:
f1 是 f2 的父函数,而 f2 被赋值给一个全局变量,导致 f2 一直在内存中,而 f2 依赖于 f1 ,因此 f1 也始终在内存中,不会在调用后被回收
add=function(){num+=1}; 这段代码中, add前没有使用 var,因此add是一个全局变量,而不是局部变量
add的值是一个匿名函数,而这个匿名函数本身也是一个闭包,所以add相当于一个setter,可以在函数外部对函数内部的局部变量进行操作
阅读全文
0 0
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 检验-会话cookie中缺少HttpOnly属性
- Android--网络交互(Socket/Http)
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- JAVA实现HTTPS协议POST请求JSON报文
- jquery练习8 html()与text()
- 闭包
- 多个活动的结果集 (MARS)
- LINUX中swap与windows中虚拟内存区别
- JS 中 DateTime日期时间及方法函数
- iOS系统弹框封装 一句代码实现中间和底部弹框
- 04基本命令
- JDK1.7.0_80的安装与配置
- CUDA入门2——获取显卡参数
- boost库之socket 非阻塞/缓冲区大小等属性设置