閉包,英文 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不受外界影響