闭包
含义:定义在一个函数内部的函数,并且能被被函数外部所引用。
函数A被定义在内部的函数B引用时,函数A被函数B闭包,当函数A被执行完时,函数A的作用域不会被释放。
function A() {
var x = 1;
function B() { //闭包
console.log(x++);
}
}
A();
function f1() {
var x = 10;
var f = function f2() {
console.log(x++);
}
return f2;
}
f();
本质:函数外部和内部连接的桥梁。
优点:可以实现对象的私有属性和私有方法。让局部变量持久化保存,防止变量污染
。
变量污染:变量被重复定义,后面的会覆盖前面的。
缺点:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
。
内存泄漏:程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
解决:在函数执行完,将不使用的局部变量删除:局部变量=null
。