采纳

首先,没有“必须”读的源代码(我发现我特喜欢说首先……),因为读源代码不是做功课,只有用到或是非常好奇才会去读,当成“日常”去做是没有意义的。

当然有些人会说 xxx 是经典,任何人读过都可以收获很多知识和技巧。我不否认那些经典,但是我很怀疑“任何人”的数量到底占“感兴趣”的人多少?我的意思是,兴致勃勃开始读的人绝对很多,但能从里面学到点什么的人就很少了。

不知道别人怎么看待读源码这件事情,我个人读源码的时间并不多,基本上只有三种原因会促使我去读源码:

  1. 读到描述不清的文档的时候,或者对文档的描述有疑问的时候;
  2. 因工作需要不得不去弄清代码的细节的时候,有时候是因为调试,有时候是因为二次开发等等;
  3. 为开源项目做贡献或打算编写扩展的时候;

可以看出我读源码的目的性都很强,泛泛而读的时候也有过,但通常都没什么收获就困了……只有抱着明确的目的去读源码的时候才会有收获,而且必须得有收获否则目的无法达成。另外,目的达成就收工,若有兴趣继续读也会把它先搁下,因为吃多了消化不好。

还有,我很少很少去读框架的源代码,唯一认真读多且比较多比较深入的只有 Rails 和 Ember,并且都是基于上述原因才去读的。我在回答的问题的时候经常引用源代码,但基本上都不是预先读过,而是碰到了问题才去读的。读懂了就回答,不懂就罢。不读框架源代码的主要原因是框架中的多数代码都是“匠气有余而匠心不足”(这是可以理解的,并非批判),真正精彩的部分在框架型项目里往往只占很小的部分,而为了找到并钻研这些部分却要花费大量的时间,个人觉得性价比偏低。

我喜欢那些匠心独运但又不炫技,可读性非常好却又能让人经常“啊哈!”的代码。在 JavaScript 的领域里,首推 TJ Holowaychuk 的各种项目,它们都具有我说的那些优点:

  1. 高可读性
  2. 结构优秀,小巧而丰富,代码平实精炼,不炫技
  3. 注重文档
  4. 测试完备

在 https://github.com/tj 这里可以找到它们,另外注意他所属的各种组织,如 koa、express 等等,都有他贡献的许多代码。不过现在他已经把兴趣移到 Go 上去了,唯一还在维护的 JavaScript 项目只剩下 koa.js(外加其周边,如 co 等项目)。

国人在 Github 上的活跃度不算太高,主要大多数人都忙于内部项目,少数提炼的比较精致值得开源的项目也往往受制于条件限制而只能在小范围内传播。前两天刚读过一个项目,写得不错:https://github.com/army8735/jsdc

顺藤摸瓜,你可以通过这个项目找到一些活跃者,然后去翻他们的 repos 吧。

我觉得underscore可以读一读

至于jquery什么的奇淫技巧太多了

Backbone或者它的轻量版Exoskeleton 它教你怎么写框架,怎么组织业务逻辑
jQ读不动的话可以考虑读读Zepto 它教你怎么搞定DOM,附赠Ajax
楼上有人提过的Underscore不错,但未来似乎是属于lodash的 它教你怎么摆平复杂数据结构

最后,虽然不是一个具体的项目,但Github Trending值得你关注,它告诉你最新最酷的项目是什么

 

Slide

作者在 readme 寫到:

應該把 Slide 當作一個示例,它演示了如何編寫自己的工作流控制工具。如果沒有親手寫過工作流控制庫,就永遠不會真正地瞭解它。


我先說:http://stackoverflow.com/questions/6638518/good-opensource-js-project-for-learning

不過是三年前的了。另如果誰知道國人寫的優秀開源 js 項目,也歡迎推薦。

不过值得一读的东西倒是挺多的。楼上给的那个列表貌似都是很大的 library/framework,那我就来两个身材很小、功能很具体的专用 library 好了。

https://github.com/gorhill/Javascript-Voronoi
http://sandbox.scriptiny.com/tinybox2/
https://github.com/Modernizr/Modernizr

另外,在 general library 里面,我推荐先读 Underscore,同样是因为比较轻,并且结构清晰,功能很有用。

有哪些值得一读的优秀开源 JS 代码的更多相关文章

  1. 嵌入式 十个最值得阅读学习的C开源项目代码

    开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...

  2. 十个最值得阅读学习的C开源项目代码

    1. Webbench Webbench 是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以 模拟3万个并 ...

  3. 值得阅读的C语言开源项目代码

    本文地址:http://www.cnblogs.com/archimedes/p/c-opensource-project.html,转载请注明源地址. 本篇文章主要总结一些C开源项目,有些是很著名的 ...

  4. 开源JS代码前面加!,+的意义

    我们都知道,函数的声明方式有这两种 function fnA(){alert('msg');}//声明式定义函数 var fnB = function(){alert('msg');}//函数赋值表达 ...

  5. 【转】十个经典的C开源项目代码

    原文: http://blog.51cto.com/chinalx1/2143904 --------------------------------------------------------- ...

  6. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

  7. GitHub上那些值得一试的JAVA开源库--转

    原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ...

  8. 值得学习的C语言开源项目

    值得学习的C语言开源项目   - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...

  9. GitHub上那些值得一试的JAVA开源库

    作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,Spring,Hibernate等等.除了这些,你可能还会fork或Star一些其他的开 ...

随机推荐

  1. C#获取农历的日期(转)

    //C# 获取农历日期 ///<summary> /// 实例化一个 ChineseLunisolarCalendar ///</summary> private static ...

  2. iOS 有些库只能在真机上运行,不能在模拟器上运行的解决方式

    在开发中,多少肯定会用到第三方的东西,或许大家也和我一样遇到到这样的情况,有些库正好适合自己的需求,但是这个库却只支持真机上运行,在模拟器上编译却不通过, 一般情况下,.a静态包,你刚刚导入的时候,不 ...

  3. 如何让HttpWebRequest使用指定网络接口传输数据

    using System; using System.Net; class Program { public static void Main () { foreach (var ip in Dns. ...

  4. css3中的 @Keyframes

    一.介绍 keyframes被称为关键帧,其类似于Flash中的关键帧.在CSS3中其主要以“@keyframes”开头,后面跟着是动画名称加上一对花括号“{…}”,括号中是一些不同时间段样式规则. ...

  5. js另类值交换

    当我们有a.b两个值,想要交换,通常是要声明第三个变量,但是我最近看到这样一种不用声明第三个变量的处理方法: var a=1,b=2; a=[b,b=a][0]; 其实还是在内存中开出了一个新的空间( ...

  6. alert、confirm、prompt的区别

    我们在开发一些后台管理系统的时候,经常会用到一些弹出框,今天我们一起看一下吧: alert:仅仅是一个提示的作用,通知用户,会阻线程,alert后面的代码,在用户点击确认后仍然会照常执行. confi ...

  7. 解决windows下Composer因php_openssl扩展缺失而安装失败的问题

    Composer( https://getcomposer.org/ )是PHP下的一个依赖管理工具.你可以在你的项目中声明你所需要用到的类库,然后Composer会在项目中为你安装它们.如果你了解N ...

  8. 11、SpringBoot------定时任务

      开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/Springboot/tree/52ef6c0c805913db1e66ed18671c322e ...

  9. 关于Vue 兄弟组件通信

    最近项目中遇到希望在操作路由组件里面内容的时候可以影响共用组件Header组件(这个其实就是他的兄弟组件)的操作.  意思就是 router-view指向的router来影响Header组件的信息 首 ...

  10. 利用bootstrap实现图片Carousel效果

    引入头文件: <link rel="stylesheet" href="bootstrap.min.css"> <link rel=" ...