幾個月前就想弄明白什么是閉包,聽名字多神奇,而且犀牛書上好像也沒有講到,baidu出來的結果倒是很多很準確,但是看著那些牛人們翻譯的英文文章,講了上千字我還是沒有明白什么是閉包,遇到復雜的地方沒法翻譯還只能引用原文來解釋,本來我的FF受某個插件影響開CSDN不僅慢還會停止響應10多秒,我都是忍痛點下CSDN的連接,結果看到這種垃圾文章真是讓人憤怒,寫了一大堆,最后還是不能讓人明白他到底想要解釋什么是閉包,還是炫耀他對技術的理解,還是要滿足他對翻譯的狂熱.
結果今天終于看到一篇
Morris Johns的文章,用了不到5分鐘就把閉包是什么講的清清楚楚,比如文章中有一句話:
In JavaScript, if you use the function
keyword inside another function, you are creating a closure.
媽的,還有比這更簡單的解釋嗎,為什么那些國內所謂的牛人就是寫不出這種平實的話,就非要浪費自己和別人的時間講一堆貌似浮云的定義,我覺得他們真的該思考下自己寫技術文章的目的,是為了在傳遞知識,還是在滿足自己的虛榮,如果是后者,建議直接在Tag中注明"自慰貼",免得浪費大家的時間.
在后面的文章中,作者列舉了很多生動的例子,每個例子后面的解釋都非常平實,沒有任何為了表現自己能力的華麗辭藻,通過他的例子,我很快理解的閉包的特點,可以用來做什么,前后不到30分鐘,回想我幾個月前光是找合適的解釋就找了近一個小時.
當我對閉包的特點已經諳熟于心后,作者再開始講一些抽象的定義,讓人感覺沒有一點障礙,就如作者自己的話:
If everything seems completely unclear then
the best thing to do is to play with the examples. Reading an explanation is
much harder than understanding examples.
My explanations of closures and stack-frames etc are not technically correct
- they are gross simplifications intended to help understanding. Once the
basic idea is grokked, you can pick up the details later.
最后給出那篇文章的地址,相信不懂閉包的人也能像我一樣很快就理解,同時也希望大家看完后別忘了別人踏踏實實寫技術文章的態度
http://www.javascriptkit.com/javatutors/closures.shtml