总结一下闭包。javascript
闭包的定义:当一个内部函数被其外部函数以外的变量所引用时,就造成了一个闭包。java
一个最简单的闭包:闭包
function A(){ var count=0; return function(){ count++; console.log(count); }; } var B=A(); B(); //1 B(); //2 B(); //3
important!=>javascript的GC机制:函数
在javascript中,若是一个对象再也不被引用,那么这个对象就会被GC回收,不然这个对象一直会保存在内存中。spa
因此咱们就能够理解为何在上述代码中,A函数明明已经被返回退出执行了,变量count却没有被回收(count一直在原来的基础上增长1,而不是每一次都从新从0开始再增长1),由于匿名函数(闭包)被返回赋予变量B,即被变量B所引用(在javascript中对象的赋值是引用传递),故这个匿名函数不会GC回收,同时变量count被匿名函数所引用,因此变量count亦不会被回收,所以变量count才会一直会保存于内存中。code
闭包的特性对象