JavaScript闭包

来源:互联网 发布:淘宝开店教程ppt下载 编辑:程序博客网 时间:2024/06/02 03:56

百度百科这样解释闭包:闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。

这段话让人头晕,什么闭包呢,我觉得理解闭包是什么,不如了解什么时候会形成闭包。

说到闭包就不得不谈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回收,实现了累加的功能,这就是闭包


0 0