JavaScript 核心原理解析
周爱民
《JavaScript 语言精髓与编程实践》作者,南潮科技(Ruff)首席架构师
32699 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 28 讲
开篇词 (1讲)
JavaScript 核心原理解析
15
15
1.0x
00:00/13:59
登录|注册

加餐 | 捡豆吃豆的学问(上):这门课讲的是什么?

讲述:周爱民大小:12.81M时长:13:59
语言的源动力
语言的生长、变化
语言的本质
例:理解“引用”概念
语句、词法和引擎内核结构的设计原理与应用原则
ECMAScript规范的实现
语言的构造过程
ECMAScript规范
教者要有其法
学习要得其道
学者要得其道
理解语言的全部
突破困扰
放下旧有概念
如何构成
语言的构成
学习态度
学习要点
课程内容
JavaScript核心原理解析

该思维导图由 AI 生成,仅供参考

你好,我是周爱民,今天又到了我的《JavaScript 核心原理解析》课。
不过与以往不同,今天不上正经课,讲点课外的话。前两天极客时间的编辑老师找我,开了一个会,认认真真地讨论了一下这门课程,认为当务之急,是给同学们开个小灶,要好好讲一下“怎么学这门课程”。因为这才短短地讲了 1/3,许多同学就已经跟不上了。
说到开小灶,我第一个就是想到了“吃”。
为什么呢?因为我父亲就是厨师,正正经经地考过厨师证,说不得多有名气,但一个县城里面,能跟他水平看齐的,也就三两个人而已。我的哥哥后来也随了父业,做了厨师,精通京、粤、淮扬多个菜系,更是拿了一级厨师的证书。
而我呢,没学厨,从父亲手上学到的唯一功夫,就是一个“吃”字。

什么是“会吃”?

会吃这件事,其实不是下嘴的功夫。这跟绝大多数人想的不同。下嘴就吃,就算有再多的法子,也无非是生啃细嚼;花样再多,也不过是甩动大腮帮子,劳力活而已。
真正会吃,说的是三件事,第一是食材,第二是味道,第三件,就单单一个“”字。
吃货世界里的“食材”,搁在我们今天的话题里,就是这二十来讲的课程。开课之前,有同学便过来打探,问我这个课程都讲些什么,看看值不值得一听。我就索性问了问他,你想听些什么呢?
VUE?没有。
HTML、CSS?没有。
前端?客户端?浏览器?手机 App?……没有,统统没有。
那位同学不死心,又悻悻然地问了一句:总该讲点 Node.js、React Native,又或者是 NPM 之类的吧?
我索性给他摊了底牌:二十节课程里面,就只算是提到这些名词,大概也不超过五次。
那位同学回了一句:那你让我学什么?

“食材”的问题

好问题啊!学什么呢?
我记得在豌豆荚的时候,有参与一些招聘的工作。老实说,作为架构师,招聘工作通常不是在第一轮,大概会是到第二、三轮的时候,才会轮到我上场。也就是说,我需要面试的,大抵都是其他“面试官”认为“这家伙还有点料”的。
有一次,我的一个面试结束得比较快,在内部的 HR 系统中填写评论的时候,正经才写了四个字,便被其他面试官打断了,他嚷嚷着,几乎快要被整个公司都听到了,说:“爱民老师,人家十几年的一线开发,大型系统都做过那么多,经验很丰富的!你怎么这么点评呢?”
嗯,我在 HR 系统中写评论,起头里的四个字是:水平一般
我想了想,停下写评论,给这个面试官聊聊开头这四个字。我说,我其实不太常用这种措辞来评论候选人,但这个也算是例外了。为什么呢?因为这个人真的是能力很强,下手很快,做的产品和项目也多,经验非常丰富,但是他确实就是水平一般。
什么叫“水平一般”呢?
因为他学的东西,别人也都学;会的东西,别人也都会;他强的东西,别人一样也强。即使别人今天不如他学得多、会得多,又或者不比他强多少,但是只要花点时间、下点功夫,也就一样儿也不会比他差。他十几年的一线开发,把自己做成了熟手、熟练工,东西会得再多,技巧再熟练,也不过是卖油翁的“但手熟尔”。
我在面试里面,确实问了他几个偏向核心的问题,他也确实知道,很清晰、很准确。但再进一步问原理时,他却是一无所知。所以,我又引导、设问,说:“如果现在让你来考虑这个问题,你会从哪儿入手呢?”那位候选人想了好几个招数,中规中矩,然而无一可用。
这就是关键所在。
“核心原理”不是一些招数技法,不是拿来多练多用就行了的。所谓“核心”呢,不见得是大家都知道的——一眼望去,万千条路径之中,找到最正确的那一条,才是核心。但是这个东西可以教,也可以记,下次看见这个路,照着走就是了。所以,大公司里有所谓的“核心团队”,新人进去,不消半年工夫,功力就大增了,出来能带一个团队了。咦,带团队做什么呢?冲锋陷阵啊,杀敌交人头啊!反正,和上面说的“吃”一样,还是劳力活。
所以,就算是在“核心团队”里,他们也只是帮你指出核心之所在,最多教你会一些套路,让人净增功力。但是这样的核心只是“死东西”,不懂得核心的原理,就如同上面说过的那位面试候选人一样,出的都是些中规中矩的招数。
“中规中矩”有什么不好么?
确实,有些时候就是不好。“中规中矩”就是所谓的“一般”。所谓的“一般”不是指你能力一般,而是指你眼界一般、思想一般,对你面前这个事物的理解程度,也是一般。
所以,所谓“水平一般”,是因为学的是“一般”的东西,再怎么学,还是一般。
汉语中,“一般”这个词,是指跟别的一样,例如“一般无二”,而不仅仅是指“普通”,也并非贬义。

这门课到底讲什么呢?

《JavaScript 核心原理解析》这门课,核心不是在讲 JavaScript 如何用,或者如何学习 JavaScript。我在开这门课,列出这二十多行代码作为标题时,就说过,我要讲的是语言。
语言最核心的部分也有两个,第一个是语言的构成,第二个是如何构成。我在这门课里,主要还是讲“如何构成”的,因为 ECMAScript 就是以“如何构成(也就是如何按照 ECMAScript 规范来实现一个 JavaScript)”为制订规范的主要目标和方向的。
在内容上面,这门课跳过了对“构成一门语言的那些基础元素(也就是语言的构成)”的讨论,而是直接进入到“如何将基础元素组织起来,成为 JavaScript”。比如,我就没讲什么是动态语言,或者也没有讲什么是标识符。这里有两点是很不幸的:
ECMAScript 中没有明确地写“我是动态语言”;
ECMAScript 里面明确地使用了“标识符”这个名词。
为什么“这两点”都是很不幸的呢?
因为无论有没有明确地使用这些名词,在 ECMAScript 中,这些概念都没有规范性质的定义。这是因为 ECMAScript 是直接面向“语言 / 引擎的编写者”,因此这个规范就默认它的读者是了解这些基础的或者学术的概念的。就好象它不会解释什么是二进制,什么是位运算一样,因为它默认是在计算机这个领域里的。
然而,我想你应该不是“计算机语言 / 编程语言学”的专家,因此那些所谓“构成一门语言的基础元素”,其实你不懂,也是正常的。在听这门课的大多数同学,其实也都一样的不懂。
然而,注意这里的这个词——“一样的”。这也就意味着,只有了解了那些“不一样的”“不懂的”东西,你才会成为“不一般的”。
而这门课程的目的,也正是要让你成为那个“不一般的”。
所以,你需要放下以前你认为你懂的那些东西。如同开篇词中所说的,它们正是阻碍了你前进的东西。比如说,有同学就从第 1 讲开始,就一直被“引用”这个概念困扰,因为他所理解的 JavaScript 的概念与我所讲的完全不同,而且混淆不清。这种状况在评论区中表现得很明显,大多数同学都是在旧有的概念中构建新的概念集合,如同浮沙高塔,原本基础就搭得不对,你再怎么努力,也是上不了这个台阶的。
然而,又如同评论区里的“海绵薇薇”同学一样,只要突破了“引用”这个概念,把旧的东西扔掉,基于这个新的东西来理解,那么再看前几讲的东西,就豁然开朗了。
我所讲的东西,原本并不是什么特别高明的、高深的技巧。问题只是,你要把原本依赖的那些概念、想法、设定,或者你认为正确的那些逻辑一一扔掉,你才能“看到”这些新的东西。
这个“扔掉”的过程太难。很多年前,我在给一个 Borland 的纪念网页上留下的题字就是:
所见即所得,所见即所碍。
Borland 是“所见即所得”这一开发理念的大成者;而最终,他也是死于对这一概念的固执坚守。
关于“引用”这个概念的突破,我想如果有机会,我会请极客时间的编辑们约请“海绵薇薇”同学来讲一下他如何理解这个东西,以及在理解这个概念前后,对 JavaScript 有哪些不一样的认识。
回头来说这门课程。语言这个东西,其实是你最终要在这门课中看到的“真相的全部”。
我希望你通过这门课程,能真正地了解语言:语言是什么,它长得怎么样,它为什么长成这个样子,它如何成长、长大,又或者变化的。对于语言来说,它的生命的原点在哪里?源动力又在哪里?
举一例来说,在第一模块(也就是前五讲)中,如果你理解了“x = x”表达的意思是“将值赋给引用”(当然前提是,你需要知道并接受“这里的引用和值,不是 JavaScript 中的,而是 ECMAScript 中的概念”)。那么,你就几乎能贯通整个 JavaScript 语言的构造过程,了解所有语句、词法,以及引擎内核结构的设计原理与应用原则。
所以,你现在再看看第一模块的总标题:“从零开始:JavaScript 语言是如何构建起来的 (5 讲)”。

马钰曾经说过

说到这里,可能就会有一些同学听出不同的意思来了:咦,爱民老师好像是在说,他的课程是屠龙秘籍,所以不是一般人学的,或者是一般人学不会的。
当然,绝不是这样的。相反,我对屠龙术与杀鸡刀向来没有偏见,我只是在这里要强调一个东西:这个课程讲的东西,跟平常你听到的并不一样。
尺长寸短,但只要是用在合适的地方,就都是好东西。
相反的,你非得像公孙大娘舞剑一般,去百万军中杀敌,那么你大概就是最先中了黑箭的那一个。关于这一点的不同,我在之前写过的一篇名为《前端要给力之:代码可以有多烂?》的博客文章里面也讲过,那篇文章从一个简单题目一直谈到了模板范型,最后呢,我还是建议大家用最保守的版本来编程序。
为什么?
研究是研究,实战是实战,不要把二者混为一谈。就好比在第 3 讲里说到过的那个面试题,最终我给出了一个应用场景:用来形成链表。然而,如果你真的要在工程项目中这样去写链表,那么大概第二天就被开除了。将这个代码写入 jQuery 的那个提交者有没有被开除,我可不知道,反正我见到这样的提交者,是要打板子的。
说回正题。我仅仅告诉你这个东西“与众不同”是不够的。毕竟,你听这堂课的目的,还是要学懂它,对吧。
然而你可知道,历史上有一个人,正好是怎么学都学不会东西的。他有七个师父,个个是江湖知名的大侠,个个也都呕心沥血,然而却教出来个一个弱鸡,还没行走江湖,初遇敌手就被人抓住了脚给扔出去了。这个历史人物来自金庸大师的《射雕英雄传》,就是郭靖。你看,我在这里给你说这个故事,可不是闲扯,因为书中有人说了一句话,道出了这个郭靖“学不会”的实质。书中第 32 回写道,那道人问道:
“你这六位师父都是武林中顶尖儿的人物,……你又不是不用功,为什么十年来进益不多,你可知道什么原因?”
郭靖回答说:
“那是因为弟子太笨,师父们再用心教也教不会。”
这时候那位道人就笑了,说了一句古今以来,求学问道最核心的要义,这句话,原话就是:
“那未必尽然,这是教而不明其法,学而不得其道。”
所以,关于我们今天说的这一门课程,“学不好、或者学不会”,其关键就在这位道人——马钰(不是马云)——说过的这句话:教者要有其法,而学者要得其道。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

这篇文章是周爱民老师关于《JavaScript核心原理解析》课程的总结。他通过生动的比喻和个人经历,向读者传达了学习技术的重要性和方法。周老师强调了对于核心原理的理解和掌握的重要性,认为只有掌握了核心原理,才能在技术领域中脱颖而出。文章内容深入浅出,通过引用《射雕英雄传》中的故事,强调了学习的方法和态度。他希望读者通过这门课程,真正了解语言的构成和发展,以及对于语言的深入理解。周老师还提到了学习的难点,强调了放下以前认知的重要性,以及教者和学者都需要掌握其法和得其道。整篇文章以轻松幽默的语气,引导读者思考学习技术的态度和方法。

2019-11-2725人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《JavaScript 核心原理解析》
新⼈⾸单¥59
立即购买
unpreview
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • hzj.
    课上的内容可能道格拉斯都不知道,但发明并布道了json. Dan 可能只懂百分之20,但创造了redux,也是react提交代码最多的。有一个小伙一开始连原型链运用的代码都很挫,但打造了最牛逼的npm生态。国人天天研究原理,为前端创造了什么?老师怎么看?您的观点几乎和阿里玉伯完全相反。

    作者回复: :) 1. 你并不是真的知道你所仰视的那些人知道些什么,或者不知道些什么。 2. 我所做的,并不是为前端去创造什么。我只是在做一些事情而已。 3. 我跟玉伯很熟。你并不了解玉伯和他的观点。

    2020-02-24
    7
    12
  • WoodyYip鲜森
    刚开始学爱民老师这门专栏,也刚买了爱民老师的绿宝书,前面读着也是觉得相当艰深,而且总怕自己的理解不对,本着不轻易放弃的念头,又开始仔细阅读每一节的留言,发现爱民老师的专栏里头的留言,在极客时间其他专栏里面,都称得上是最用心的少数专栏了,首先是读者的留言用心,使得其他阅读的人也可以将自己的感悟与之相对照,而更重要的是,爱民老师的回复用心,大部分有营养的留言,爱民老师都回复了,有时甚至洋洋洒洒几百字,爱民老师,诚不愧”爱民“此名,从这些回复当中,我能读到激励、能读到赞许,能读到亲和,能读到温暖。要不怎么说技术上升到一定的高度,它一定是与哲学会产生关联的。在读完前三小节仍有意犹未尽、怅然若失的感觉时,忽然看到底下有一条评论,冥冥中指引我来看到爱民老师加餐的内容”吃豆捡豆的学问“,忽然年头就通达了,静下心再回头细品前面的内容,碰到理解不了的,结合评论、结合上网搜索,结合真机实操,结合自己的思考,终于有了量变引发质变的愉悦感,现今读来甘之如饴,嗯,真香。

    作者回复: 谢谢woody😅我当继续努力💪

    2021-06-28
    2
    2
  • Geek9534
    如果前辈去面试 ,面试官问你,你有遇到过什么难题,你会怎么回答 ,让面试官觉得你不一般

    作者回复: 这个问题的主要目的是了解你经历过的最硬核的项目或经历,而不真的是解决了什么。你如果回答的是那些永远不可能完成的实验室项目,大概最好。把“最难”转换成“在毫无希望时如何保持坚持的决心”😀又,我的意见没什么可参考性~哈哈

    2021-11-30
  • 孜孜
    当卖油翁说出,“唯手熟尔”这句话的时候就超出“手熟”的境界啦。。。

    作者回复: 知人者智,自知者明 所以卖油翁是”对自己很明白“的。

    2020-06-11
  • 潇潇雨歇
    确实,学一个东西最好要去了解它的本质,深入底层的原理。老师这门课很好,让我知道很多深层次,本质上的东西,改变了一些认知,让我越来越觉得去源头学知识的重要性。比如js这门语言如何来的,又是如何构成的,把这些都搞通,语言也就真的通了。之前学习就是存在老师讲的问题,学来学去都是一般的知识,一直学并没有提高,现在要去学习不一般的东西,学习更深层次更本质的东西。
    2019-11-27
    19
  • Mr_Liu
    果然,老师这个加餐很及时,回过头来再听,感觉又不一样的感觉,‘’懂‘’问题和,懂问题是两个情况。书读百遍其义自见,但方向错了千遍也是一个理解
    2019-11-27
    7
  • chenzesam
    追求真源才应是本性,撇去浮尘才能不被把控。
    2020-04-03
    5
  • 会飞小超人
    我所理解的,老师讲的是“道”,而平时所用的编程技巧是“术”,把术修炼的高超固然重要,但不通其道的话终究是不能融汇贯通,甚至不小心还会“走火入魔”(坚持一些错误的观念而难以自知)。
    2020-03-21
    3
  • 行问
    如果每门课程都是一样的,那我是绝对不会来学习这门课程的,简单明了说了:JavaScript 核心原理解析 感觉现在的前端新手,被市面上的观念带偏了,认为前端就是什么 3 大框架:Vue React Angular 在操作 DOM 方面,我仍然认为 jQuery 是这个世界上最伟大的库,没有之一。如果真的能够把 jQuery 的源码全部读懂,我相信在国内已经甩开 80% 90% 的前端从业人员了。 基础打扎实了,那么学习应用层的就能大大减少时间,更快上手...... 回到老师的课程,我就是喜欢看到不一样,看到核心的东西,李小龙也是从小开始从马步、跑步开始的,这就是腰腿的力量,扯远了。
    2019-12-03
    1
    3
  • Geek_01c5f4
    的确如此,看了几篇内容,发现根本没明白;又重新来看,怎么跟其他的课程不一样呢?,果然是不一般。所见即所得,所见即所碍!不思则殆!
    2021-09-02
    1
收起评论
大纲
固定大纲
什么是“会吃”?
“食材”的问题
这门课到底讲什么呢?
马钰曾经说过
显示
设置
留言
20
收藏
68
沉浸
阅读
分享
手机端
快捷键
回顶部