幾個(gè)月前就想弄明白什么是閉包,聽名字多神奇,而且犀牛書上好像也沒有講到,baidu出來的結(jié)果倒是很多很準(zhǔn)確,但是看著那些牛人們翻譯的英文文章,講了上千字我還是沒有明白什么是閉包,遇到復(fù)雜的地方?jīng)]法翻譯還只能引用原文來解釋,本來我的FF受某個(gè)插件影響開CSDN不僅慢還會停止響應(yīng)10多秒,我都是忍痛點(diǎn)下CSDN的連接,結(jié)果看到這種垃圾文章真是讓人憤怒,寫了一大堆,最后還是不能讓人明白他到底想要解釋什么是閉包,還是炫耀他對技術(shù)的理解,還是要滿足他對翻譯的狂熱.
結(jié)果今天終于看到一篇
Morris Johns的文章,用了不到5分鐘就把閉包是什么講的清清楚楚,比如文章中有一句話:
In JavaScript, if you use the function
keyword inside another function, you are creating a closure.
媽的,還有比這更簡單的解釋嗎,為什么那些國內(nèi)所謂的牛人就是寫不出這種平實(shí)的話,就非要浪費(fèi)自己和別人的時(shí)間講一堆貌似浮云的定義,我覺得他們真的該思考下自己寫技術(shù)文章的目的,是為了在傳遞知識,還是在滿足自己的虛榮,如果是后者,建議直接在Tag中注明"自慰貼",免得浪費(fèi)大家的時(shí)間.
在后面的文章中,作者列舉了很多生動的例子,每個(gè)例子后面的解釋都非常平實(shí),沒有任何為了表現(xiàn)自己能力的華麗辭藻,通過他的例子,我很快理解的閉包的特點(diǎn),可以用來做什么,前后不到30分鐘,回想我?guī)讉€(gè)月前光是找合適的解釋就找了近一個(gè)小時(shí).
當(dāng)我對閉包的特點(diǎn)已經(jīng)諳熟于心后,作者再開始講一些抽象的定義,讓人感覺沒有一點(diǎn)障礙,就如作者自己的話:
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.
最后給出那篇文章的地址,相信不懂閉包的人也能像我一樣很快就理解,同時(shí)也希望大家看完后別忘了別人踏踏實(shí)實(shí)寫技術(shù)文章的態(tài)度
http://www.javascriptkit.com/javatutors/closures.shtml