function A(){
var text="hello world";
function B(){
console.log(text);
}
return B;
}
var c=A();
c(); // hello world
定义
(1)闭包是指可以访问其所在作用域的函数,即需要通过作用域链查找变量的函数就是闭包
(2)闭包是指有权访问另一个函数作用域中的变量的函数,即访问上层函数的作用域的内层函数就是闭包
(3)闭包是由函数以及创建该函数的词法环境组合而成。
特性
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
上面的示例中A是B的父函数,而B被赋给了一个全局变量C(全局变量的生命周期直至浏览器卸载页面才会结束),这导致B始终在内存中,而B的存在依赖于A,因此A也始终在内存中,不会在调用结束后被垃圾回收机制回收,如果不当使用会增大内存消耗。
垃圾回收机制
1.全局变量不会被回收。
2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
3.在javascript中,如果一个对象不再被引用,那么这个对象就会被GC(garbage collection)回收;
4.如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。