您的位置:首页 > Web前端 > JavaScript

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回收,实现了累加的功能,这就是闭包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: