閉包是js裏很重要的一塊,不少高級應用都會用閉包去實現。
閉包和js變量的做用域的關係很密切,變量的做用域分爲全局變量和局部變量;
從字面意思上看都知道全局變量的做用域比局部變量的做用域大,例如:閉包
var n=10; function F(){ alert(n); } F();//10
以上是全局變量的做用域;函數
function F(){ var n=10; alert(n);//10 } alert(n);// 報錯
以上是局部變量的做用域
特別注意的是: 在函數內部若是沒有使用var聲明的變量也是全局變量哦。
所謂閉包就是一個函數A可以讀取函數B內部的變量的A函數(我的理解的哦);
例如:spa
function A(){ var n=0; function B(){ n++; alert(n); } return B;//這句很重要的哦! } var obj= A(); obj();// 1 obj();// 2
這段代碼的特色是:
1.函數B嵌套在函數A中;
2.函數A返回函數B。
以上代碼能夠幫助理解閉包,說實話,官方的話太難理解了。
閉包的做用:閉包的做用就是在A執行完並返回後,閉包使得Javascript的垃圾回收機制GC不會收回a所佔用的資源,由於A的內部函數B的執行須要依賴A中的變量。
在上面的例子中,因爲閉包的存在使得函數A返回後,A中的i始終存在,這樣每次執行(),n都是自加1後alert出n的值。code