JavaScript闭包
2015-10-05 19:14
573 查看
百度百科这样解释闭包:闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。
这段话让人头晕,什么闭包呢,我觉得理解闭包是什么,不如了解什么时候会形成闭包。
说到闭包就不得不谈JavaScript解析器的GC,已知GC会回收掉无用的局部变量,当我用一种方法让GC无法回收这个局部变量,这样就形成了闭包。
function a() {
var c = 0;
var d = 0;
d++;
function b() {
c++;
console.log("c" + c);
}
console.log("d" + d);
return b;
}
var m = a();
for (var i = 0; i < 2; i++) {
m();
}函数a定义了局部变量c,d,内嵌函数b,b对a中的局部变量进行了++运算,a返回了函数b,m=a()即m=b,每次调用m()等于b(),也即c++,以为我随时都可能调用变量c,所以c不会被GC回收,实现了累加的功能,这就是闭包
这段话让人头晕,什么闭包呢,我觉得理解闭包是什么,不如了解什么时候会形成闭包。
说到闭包就不得不谈JavaScript解析器的GC,已知GC会回收掉无用的局部变量,当我用一种方法让GC无法回收这个局部变量,这样就形成了闭包。
function a() {
var c = 0;
var d = 0;
d++;
function b() {
c++;
console.log("c" + c);
}
console.log("d" + d);
return b;
}
var m = a();
for (var i = 0; i < 2; i++) {
m();
}函数a定义了局部变量c,d,内嵌函数b,b对a中的局部变量进行了++运算,a返回了函数b,m=a()即m=b,每次调用m()等于b(),也即c++,以为我随时都可能调用变量c,所以c不会被GC回收,实现了累加的功能,这就是闭包
相关文章推荐
- 开发人员常用的10个JavaScript库
- Javascript的异常处理介绍
- JS模拟点击的那些事儿
- JavaScript网页脚本性能优化
- 2015-09-28认识js1
- 全屏轮播插件fullpage.js的使用
- Gson解析(6)——注册TypeAdapter及处理Enum类型
- Gson解析(5)——实际开发中的特殊需求处理
- Gson解析(4)——Map处理数据(下)
- 用js判断页面是否加载完毕
- Gson解析(3)——Map处理数据(上)
- 解析Json数据并缓存图片到sdcard
- Gson解析(1)——简单对象转化和带泛型的List转化
- 【json】json对象和json数组的操作
- JavaScript 函数参数传递到底是值传递还是引用传递 (精华)
- 为什么要学javascript
- JavaScript 函数参数传递到底是值传递还是引用传递
- javascript中bind()函数实现和应用以及多次bind的结果和参数位置的思考
- js日期格式化函数
- 快速排序之JavaScript实现