闭包为何可实现变量持久性
来源:互联网 发布:哥贝克力 知乎 编辑:程序博客网 时间:2024/06/08 14:40
请看如下例子:
function f1(){
var a=1; //私有变量,外部不能访问。但能通过闭包访问。
add=function(){
a+=1;
}
function f2(){
alert(a);
}
return f2;
}
var result=f1();
result(); // 1
add(); //调用
result(); // 2
result就是闭包f2函数。它一共运行了2次,第一次的值是1,第二次的值是2。
这说明函数f1中的局部变量a一直保存在内存中,并没有在f1调用结束后被自动清除。
因为f2在f1中定义,而f2被赋给了一个全局变量result,所以f2始终在内存中(全局的变量和全局函数只有在主程序结束后才会被操作系统回收),而a在f2中,所以不会在f1调用结束后立即被垃圾回收机制回收。
另外,将add的定义变成function add(){a+=1}就会报错,这是为什么呢?
因为function add(){a+=1}声明在f1里,那么它是局部函数,所以f1外不能直接访问。。。。。
阅读全文
0 0
- 闭包为何可实现变量持久性
- 持久性私有变量
- 闭包实现 私有变量
- 持久性
- ThreadLocal类型变量为何声明为静态?- ThreadLocal实现原理
- js闭包实现私有变量和单例模式
- js闭包可以实现局部变量共享
- 闭包与变量
- 闭包与变量
- 闭包与变量
- 闭包与变量
- 闭包和变量
- 借助 Oracle 数据库实现 Python 数据持久性
- js变量:局部变量、全局变量、闭包
- js变量:全局变量、局部变量、闭包
- 可持久性数组 bzoj3674 可持久化并查集加强版
- js闭包与变量
- JS闭包与变量
- maven gatling 运行
- Kafka集群动态修改复制因子以及数据留存时间
- oracle密码重置
- Spring 整合JDBCTemplate
- 桥接模式(Bridge)(对象结构型模式)
- 闭包为何可实现变量持久性
- 手机突然没信号!伪基站究竟是怎样搞鬼的?
- 浅谈js中 call, apply, bind 的区别
- tensorflow中tf.app.run()的含义
- Redis学习(一)概述
- android https 绕证书
- mysql索引类型和索引方法
- 日期格式工具类
- eclipse在选定区域范围内替换文本