閉包,說起來那麼難,其實理解了作用域,那麼理解閉包就容易多了。
全域性環境,區域性環境,這兩個概念很好理解了。那麼要深入理解下函式的區域性環境。
函式的區域性環境,也就是說在一個函式內定義的變數,這個變數只能在該函式內部進行呼叫。
還要記住一點,父級函式內宣告的變數,可以在子函式內進行呼叫;反之不可以。
明白以上兩點,那麼閉包就差不多了。
下面是給出的例項:
function outer() { //宣告父函式 var num = 33; function inner() { //宣告子函式 return num; }; return inner(); }; var obj = outer(); alert(obj); //返回值是 33
抽象成概念的話:
由於作用域的關係,JS全域性環境不能訪問函式內宣告的區域性變數。
那麼閉包提供了一種途徑,可以使外部環境獲取到函式內宣告的區域性變數。
假設一個functionA,內部宣告瞭一個functionB, 那麼通過function B ,外部環境可以訪問到functionA內定義的變數。