Habitat Framework

专注于Java EE企业级开发
posts - 13, comments - 81, trackbacks - 0, articles - 5
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于Javascript闭包学习

Posted on 2007-10-18 13:28 Kerwin Weng 阅读(1563) 评论(14)  编辑  收藏 所属分类: 非技术类Javascript
几个月前就想弄明白什么是闭包,听名字多神奇,而且犀牛书上好像也没有讲到,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

评论

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 14:45 by hee
偶也没怎么去详细看过闭包的知识。

只知道dennis那例子为啥alert会弹出dennis字答串

var str = "dennis"; //这样当于全局变量,像window.str = "dennis"

到alert(str)时,局部变量没找到,就去找全局变量中的str,所以结果dennis

不知道有没有说错。哈哈

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 15:32 by Kerwin Weng
@dennis
文章的标题就是关于Javascript闭包学习,那句话的开头也是说In Javascript,关其他语言什么事,我只是从学习Javascript闭包中遇到的现象,讨论我们写文章的态度,不是要从语言的高度或者学习技术的角度去看待到底什么是闭包,看来你也是来向我们展示你的闭包理解能力的吧

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 15:43 by dennis
@Kerwin Weng
你的态度很奇怪,我不需要展示自己,因为你并没有付给我工资,我只是探讨技术问题,如果您觉的不合适,可以删除,谢谢。

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 15:47 by dennis
而且,谈到写文章的态度,你的态度也需要检讨一下。你没有任何权利要求网友免费写文章,还要求写的平实近人,为什么不自省下自己?打住,不说了,免的说我又在展示云云。

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 15:49 by 蓝色天空的囚徒
大家的态度都很奇怪....

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 16:04 by hee
刚来blogjava上找东西,发现没人理我回复的内容。。。

受创中。。。

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 16:49 by Kerwin Weng
@dennis
这样的理解没错,可也仅仅是从javascript如何构造出闭包的角度来说,没有抓住重点。那么,如果换一种语言,你又要去理解什么是闭包。说到底,学技术还是要学到根子上,闭包的概念真没那么复杂,有兴趣去看看函数式编程和动态语言方面的知识。

又要教育我们没有抓住重点,又要鞭策我们学到根子上,如果不承认是为了展示,那只能说是有强烈的育人冲动吧,如果都不是,那为什么要删掉自己的评论?

我不指望别人都把文章写得朴实易懂,但是我有权利质疑别人玩弄技术概念背后的动机,当然我更有权利建议大家都学习Morris Johns的写作风格,正如你也有权利保持你强烈的育人冲动一样

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 16:55 by dennis
@Kerwin Weng
请注意,我的仅仅是建议,因为我认为学习技术就是要学根本,不然你在遇到另一个问题的时候仍然要浪费N多的时间去重复学习。我删掉,仅仅是因为您认为的我是在展示,既然如此认为,那么我最好删掉免的被人戴帽子。育人的冲动我没有,因为您不给我钱。不用如此激动,我非常奇怪这样激动的情绪,可能我的想法太简单了。

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 16:57 by dennis
我不再回复您的质疑,您也可以保持这样的质疑,我不想再让人说我在展示or育人的冲动等等。我回复这个帖子也仅仅是因为我对闭包这个问题的兴趣,就此打住。

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 17:08 by BackBase
我不指望别人都把文章写得朴实易懂,但是我有权利质疑别人玩弄技术概念背后的动机
..........太对了 这种孙子 就是TMD祸害。。。。。。。 国内太多了这种鸟人了 估计自己对那个也不是太明白 就在那瞎堆砌词 搞的自己跟权威一样

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 17:19 by Kerwin Weng
@dennis
其实对于你的第二篇回复也删掉了我觉得很惋惜,无论如何还是要承认你在闭包上面的研究应该很深

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 17:27 by Kerwin Weng
@BackBase
热泪满眶强烈赞同ing.....
但是现在我觉得这都不算太坏的,相对马来西亚,新加坡这些思想落后国家的某些程序员,始终坚持做井底之蛙,拒绝与时俱进学习成熟的技术,都2007了,做BS还在用Servlet,一个方法上千行,Java当成script用,完全不懂接口和继承的用法来说,我还是喜欢中国的程序环境,至少有学习的原动力....

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 17:30 by 翔南
同意LZ观点!!

# re: 关于Javascript闭包学习  回复  更多评论   

2007-10-18 19:30 by 刘甘泉
閉包?我的理解就是返回函數的函數。

只有注册用户登录后才能发表评论。


网站导航: