閉包(轉)

  閉包是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

相關文章
相關標籤/搜索