源码解读这半年 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不在回答技术问题时复制粘贴 AI 生成的内容
hanzichi
V2EX    程序员

源码解读这半年

  •  8
     
  •   hanzichi 2016-11-02 17:12:15 +08:00 5258 次点击
    这是一个创建于 3266 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作者:韩子迟

    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 算是对我的肯定和鼓励吧 ^_^

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

    27 条回复    2016-11-08 19:36:41 +08:00
    hanzichi
        1
    hanzichi  
    OP
       2016-11-02 17:23:06 +08:00
    V 站的 markdown 不支持删除线啊 ..
    lil460982475
        2
    lil460982475  
       2016-11-02 17:24:29 +08:00
    为你的坚持和努力点个赞
    zenliver
        3
    zenliver  
       2016-11-02 17:25:51 +08:00
    大学毕业, 工作的第一家公司培训内容之一就是一周把 underscore 源码读完, 读完后, 然并卵, 再也没用过 js
    hanzichi
        4
    hanzichi  
    OP
       2016-11-02 17:28:46 +08:00
    @zenliver 一周 .. 厉害,我花了整整半年 ..
    zenliver
        5
    zenliver  
       2016-11-02 17:34:53 +08:00
    @hanzichi 当然不如你理解的深刻哈
    sokis
        6
    sokis  
       2016-11-02 17:47:31 +08:00
    当年最喜欢的头像。。。楼主加油
    hanzichi
        7
    hanzichi  
    OP
       2016-11-02 17:49:03 +08:00
    @sokis 谢谢~
    moyang
        8
    moyang  
       2016-11-02 18:13:32 +08:00
    感谢,给了我灵感。也去找个源码来写一写好了
    Douglee
        9
    Douglee  
       2016-11-02 18:18:08 +08:00
    表示正在看 guava, 真的只是看而已...
    iyaozhen
        10
    iyaozhen  
       2016-11-02 18:26:49 +08:00 via Android
    赞!向楼主学习
    qwer1234asdf
        11
    qwer1234asdf  
       2016-11-02 19:07:15 +08:00 via iPhone
    读书时,坚持看了一年多 linux 内核,翻译了好多文档.....工作后却没那个激情了
    irenicus
        12
    irenicus  
       2016-11-02 19:15:00 +08:00 via Android
    赞,正好最近有了解 js 的冲动
    xcatliu
        13
    xcatliu  
       2016-11-02 19:22:23 +08:00 via iPhone
    感谢楼主分享,能坚持这么久真是太不易了。相楼主学习
    hanzichi
        14
    hanzichi  
    OP
       2016-11-02 19:47:22 +08:00
    @qwer1234asdf 有激情也很少有时间了,琐事一堆 ..
    hanzichi
        15
    hanzichi  
    OP
       2016-11-02 19:48:17 +08:00
    @xcatliu 向大神学习!离大神还很远
    peneazy
        16
    peneazy  
       2016-11-02 21:44:47 +08:00 via Android
    同解读 underscore 源码半个月,学到不少东西
    bengol
        17
    bengol  
       2016-11-02 22:17:46 +08:00
    为 lz 的细致和坚持点赞
    btjoker
        18
    btjoker  
       2016-11-02 22:37:43 +08:00
    (=ω)=b
    wensonsmith
        19
    wensonsmith  
       2016-11-02 22:37:59 +08:00
    Powered
        20
    Powered  
       2016-11-02 23:40:16 +08:00
    给我了一些启发

    我也要读读源码,写个系列文章了
    hanzichi
        21
    hanzichi  
    OP
       2016-11-03 08:51:54 +08:00
    @peneazy 加油!
    hanzichi
        22
    hanzichi  
    OP
       2016-11-03 08:52:22 +08:00
    @wensonsmith 过奖了~
    Canrz
        23
    Canrz  
       2016-11-03 15:08:38 +08:00
    以前 star 了,赞个
    hanzichi
        24
    hanzichi  
    OP
       2016-11-03 20:26:17 +08:00
    @Canrz 感谢支持~
    BruceYuan
        25
    BruceYuan  
       2016-11-08 08:55:16 +08:00
    膝盖献给大神。
    hanzichi
        26
    hanzichi  
    OP
       2016-11-08 09:10:37 +08:00
    @BruceYuan 过奖了,惭愧 ..
    BruceYuan
        27
    BruceYuan  
       2016-11-08 19:36:41 +08:00
    @hanzichi 我 follow 了您,感觉对我很有帮助。做 leetcode 的时候有看您的解法。菜鸟入门中。 QAQ
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1049 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 18:03 PVG 02:03 LAX 11:03 JFK 14:03
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86