感覺似懂非懂的概念,這裡記錄了解程序。
什麼是閉包
“官方”的解釋是:所謂“閉包”,指的是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。
相信很少有人能直接看懂這句話,因為他描述的太學術。我想用如何在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>