Underscore 源码

作者:韩子迟

What?

不知不觉间,「Underscore 源码解读系列」进入了真正的尾声,也请允许我最后一次 po 下项目的原始地址 https://github.com/hanzichi/underscore-analysis

这半年以来,花费了大量的业余时间,共计写了 25 篇随笔(包括此文),也给 underscore-1.8.3 的源码加了差不多 1500 行 注释,对于当初说的要做「史上最详细的 underscore 源码剖析」,至此我也觉得问心无愧。

本文不想说我在这个过程中学到了什么,学到的东西,能写的都在前面 24 篇随笔中了,只能意会的我也说不出来(感触最深的是闭包的强大)。本文是一篇「水文」,不谈技术,抛开代码,听楼主扯扯淡。

Why Underscore?

早期的几篇随笔都有「Why Underscore」这一节:

阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多。为什么是 Underscore?最主要的原因是 Underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript 初学者。从中,你不仅可以学到用 void 0 代替 undefined 避免 undefined 被重写等一些小技巧 ,也可以学到变量类型判断、函数节流&函数去抖等常用的方法,还可以学到很多浏览器兼容的 hack,更可以学到作者的整体设计思路以及 API 设计的原理。

其实这并不是直接原因,「导火索」是当时(三月末)学习函数节流和函数去抖的时候,发现很多文章混淆了这两个概念,了解到 Underscore 封装了这两个函数,但是一用却发现了它的 BUG!(详见 一次发现underscore源码bug的经历以及对学术界『拿来主义』的思考 一文)

Underscore 早些年就接触过,对其的了解也仅限于「一个轻巧的工具库」,会不会还有其他的 BUG?同时源码这么短(之前想过看 jQuery,被接近 1w 行吓回来了),耦合度低(可以一个个方法分开看),也进一步激发了通篇解读的兴趣,想着这一路下来肯定能学到不少东西。好东西要与大家分享,同时确定了写系列文章的 idea。

Where to write?

哪里写?想都没想就确定了主战场 GitHub。之前我是不玩 GitHub 的,现在已经离不开了,每天不刷个几十次都手痒。为什么确定在 GitHub?理由很简单,GitHub 有逼格啊(毕竟是全球最大的同性交友社区)。

当然,酒香也怕巷子深,写完了没人看无疑是对自信心的极大打击,同时也需要大家来提出宝贵的意见。为此,几乎每一篇完成后,都会在以下渠道分享:

其实主要就是前三个,后面两个用了一段时间感觉不大好就不用了。极客头条个人感觉分类有点乱,同时因为是 CSDN 旗下的,个人对 CSDN 没太多好感;干货集中营的话,维护者是「daimajia」大大,感觉移动开发者关注的会比较多。

分享的话,如果脸皮厚的话,也可以在微博艾特一些圈内大大们(楼主脸皮比较薄 ...)。

当然,我不仅在 GitHub 的 issue 里写,还在以下一些渠道写:

简书的话,后面断断续续不更了,个人喜欢专门的 IT 类博客,而且觉得简书的 Markdown 渲染有问题,为什么都说它的 Markdown 体验好 ... sf 和 伯乐在线 的话,阅读量还是可以的,只是它们不是专门做博客系统的,基础的分类归档功能都没有(或许是我没找到?),以后应该还是会以博客园为主要战场。

Then?

underscore.js 的源码解读画上了句号,接下去干嘛?其实楼主对以下几个库也挺感兴趣的。

End

那就这样吧,749 Star / 140 Watch / 153 Fork 算是对我的肯定和鼓励吧 ^_^

也许我韩子迟还会回来的!

可能是史上最详细的 underscore 源码剖析:https://github.com/hanzichi/underscore-analysis
程序员都应该学点算法:https://github.com/hanzichi/leetcode
了解博主韩子迟:http://www.cnblogs.com/zichi/p/about.html
GitHub:https://github.com/hanzichi Follow 楼主给楼主更多写作的动力~

Underscore 源码的更多相关文章

  1. underscore 源码解读之 bind 方法的实现

    自从进入七月以来,我的 underscore 源码解读系列 更新缓慢,再这样下去,今年更完的目标似乎要落空,赶紧写一篇压压惊. 前文 跟大家简单介绍了下 ES5 中的 bind 方法以及使用场景(没读 ...

  2. 一次发现underscore源码bug的经历以及对学术界『拿来主义』的思考

    事情是如何发生的 最近干了件事情,发现了 underscore 源码的一个 bug.这件事本身并没有什么可说的,但是过程值得我们深思,记录如下,各位看官仁者见仁智者见智. 平时有浏览园区首页文章的习惯 ...

  3. underscore源码阅读记录

    这几天有大神推荐读underscore源码,趁着项目测试的空白时间,看了一下. 整个underscore包括了常用的工具函数,下面以1.3.3源码为例分析一下. _.size = function(o ...

  4. underscore源码解析(一)

    留存root // Establish the root object, `window` (`self`) in the browser, `global` // on the server, or ...

  5. Underscore源码阅读极简版入门

    看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: https://github.com/hanzichi/underscore-an ...

  6. 前端日报-20160527 underscore 源码解读

    underscore 源码解读 API文档浏览器 JavaScript 中加号操作符细节 抛弃 jQuery,拥抱原生 JS 从 0 开始学习 GitHub 系列之「加入 GitHub」 js实现克隆 ...

  7. #啃underscore源码 一、root对象初始化部分

    最近由于比赛要交了,以及工作室屯了各种项目,实在忙不过来刷题,所以很久没更blog了(良心痛),现在自己的水平还是渣代码堆砌 + 简单的增删改查(悲伤) 所以痛定思痛,决定之后的任务是先补学校课堂的知 ...

  8. underscore源码解析 (转载)

    转载出自http://www.cnblogs.com/human/p/3273616.html (function() { // 创建一个全局对象, 在浏览器中表示为window对象, 在Node.j ...

  9. underscore源码解析

    (function() { // 创建一个全局对象, 在浏览器中表示为window对象, 在Node.js中表示global对象 var root = this; // 保存"_" ...

随机推荐

  1. 转: 关于 ssl的建立链接的过程

    转自:  http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html SSL/TLS协议运行机制的概述   作者: 阮一峰 日期: 2014年2月 5日 互 ...

  2. poj3211

    Washing Clothes Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9654   Accepted: 3095 ...

  3. 第二章 Background & Borders 之 Multiple borders

    2. Multiple Boerders 多边框 在工作中我们可能会遇到给盒子外层实现多个边框.如以下效果: 方法1: 实现这个效果,其实很简单,使用CSS3 的box-shadow属性,先看看box ...

  4. CSS - 实现文字显示过长时用省略

    一.添加-文字显示超出范围时隐藏属性 overflow:hidden; 二.添加-超出文字省略号属性 text-overflow:ellipsis; 三.添加-文字不换行属性 white-space: ...

  5. 阿里巴巴的分布式应用框架-dubbo负载均衡策略--- 一致哈希算法

    dubbo是阿里巴巴公司开发的一个开源分布式应用框架,基于服务的发布者和订阅者,服务者启动服务向注册中心发布自己的服务:消费者(订阅者)启动服务器向注册中心订阅所需要的服务.注册中心将订阅的服务注册列 ...

  6. [转载]JSON序列化与反序列化

    转载:http://www.cnblogs.com/ejiyuan/archive/2010/04/09/1708084.html 方法一:引入System.Web.Script.Serializat ...

  7. 教你21天学会C++ (有图有真相)

    这张图,是在一位有十多年开发经验的资深前辈博客里看到的,觉得很有趣,分享之~ 这位大神的博客是:http://coolshell.cn 理论是可行的,当你刚开始学习C++,到第21天的时候出门千万要小 ...

  8. BaseAdapter&ArrayAdapter在ListView中应用

    一:BaseAdapter:共同实现的基类的适配器,是ArrayAdapter SimpleAdapter等的父类, 一般用于比较复杂的ListView,扩展性强. 详细信息可查看谷歌官方API:ht ...

  9. C# 前台线程和后台线程

    进程会等待所有的前台线程完成后在结束工作,但是如果只剩下后台线程,则会直接结束工作 using System; using System.Collections.Generic; using Syst ...

  10. XML DOM 循环(foreach)读取PHP数据 和 PHP 编写 XML DOM 【转载】

    用 PHP 读取和编写可扩展标记语言(XML)看起来可能有点恐怖.实际上,XML 和它的所有相关技术可能是恐怖的,但是用 PHP 读取和编写 XML 不一定是项恐怖的任务.首先,需要学习一点关于 XM ...