天天看點

閉包--循序學習1.javascript的閉包

感覺似懂非懂的概念,這裡記錄了解程序。

什麼是閉包

“官方”的解釋是:所謂“閉包”,指的是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。

相信很少有人能直接看懂這句話,因為他描述的太學術。我想用如何在Javascript中建立一個閉包來告訴你什麼是閉包,因為跳過閉包的建立過程直接了解閉包的定義是非常困難的。看下面這段

1

2

3

4

5

6

7

8

9

<code>function</code> <code>a(){</code>

<code>var</code> <code>i=0;</code>

<code>function</code> <code>b(){</code>

<code>alert(++i);</code>

<code>}</code>

<code>return</code> <code>b;</code>

<code>var</code> <code>c=a();</code>

<code>c();</code>

這段代碼有兩個特點:

1、函數b嵌套在函數a内部;

2、函數a傳回函數b。

這樣在執行完var c=a( )後,變量c實際上是指向了函數b,再執行c( )後就會彈出一個視窗顯示i的值(第一次為1)。這段代碼其實就建立了一個閉包,為什麼?因為函數a外的變量c引用了函數a内的函數b,就是說:

當函數a的内部函數b被函數a外的一個變量引用的時候,就建立了一個閉包。

在上面的例子中,由于閉包的存在使得函數a傳回後,a中的i始終存在,這樣每次執行c(),i都是自加1後alert出i的值。

唯有不斷學習方能改變!

-- <b>Ryan Miao</b>