闭包,英文 Closure
集合论里的闭包,指的是对集合成员进行某些操作时,结果也是集合的成员,那么这个集合对这个操作就是闭包。比如整数集合对 加减法来说就是闭包。
编程里的闭包,指的是一个函数和它所需的环境,被整个打包进另一个函数,在其内部形成一个独立的作用域,下面就是一个JS中最简单的闭包:
function f1()
{
var n = 999; //n在f1内部定义,与外界无关 var表示这不是全局变量
function f2()
{
n++;
alert(n);
}
return f2;
}
当在外部将 f1 返回值赋给一个变量之后,因为该变量的存在,f1 和其内部的 n 会一直存在于内存之中,不会被销毁,这个外部变量代表一个完整而独立的作用域,和集合论的闭包有一定相似:
var result = f1();
result(); //输出1000
result(); //输出1001 变量n一直保存在内存中,并没有在f1调用结束后被自动清除。
n = 10008;
result(); //输出1002 变量n不受外界影响