JavaScript -- 閉包

用JS(包括Jquery)有一段時間了,可是對於閉包啥的一直沒仔細研究過。閉包是JS中對於初學者而言,一個較難的知識點。javascript

如下是我從網上學習到的,我把它寫出來,一方面分享給你們,有啥不對的看法還望指出;另外一讓面也是記錄本身的學習過程。java

 

做用域瀏覽器

要理解閉包,首先是做用域問題。閉包

JS的function中能夠讀取全局變量,如如下代碼:函數

   var n =  1;
  function f1(){
    alert(n);
  }
  f1(); // 1

 

可是,沒法從function外部獲取內部的局部變量,如如下代碼:學習

 function f1(){
   var n = 1;
 }
 alert(n); // error, can't get variable n

 

有些狀況下,咱們仍是須要從外部獲取函數中的局部變量,這式就須要使用閉包。考慮以下代碼:blog

function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

 

myFunc()執行後,瀏覽器將彈出"Mozilla"。ip

可是,從「常理」來考慮, 內存

var myFunc = makeFunc();作用域

這句代碼將返回displayName這個函數,然而makeFunc()方法已經執行完畢,應當沒法獲取name變量的值了!但事實相反,很明顯,代碼不是按照「常理」在運行。

這裏,myFunc已經成爲一個閉包。

 

閉包

閉包是一個特殊的函數,這個函數含有上下文環境。

它有兩個做用:1,能夠讀取函數內部的變量;2,讓這些捏不變量保持在內存中。 

相關文章
相關標籤/搜索