昨天受邀为今年的英诺大四新生分享了一下计算机系的选课。我推荐了可能是 UoN 史上最冷门的一门课——《Programs, Proofs and Types》。
因为讲演时间被要求在五分钟内,所以基本也没怎么介绍具体内容,只提了很多这个有意思的老师。
因为嗓子坏了没法声音出场,感谢凡哥的代替。
视频里提到的教授演讲地址:https://youtu.be/DllYOFw5Qio。
昨天受邀为今年的英诺大四新生分享了一下计算机系的选课。我推荐了可能是 UoN 史上最冷门的一门课——《Programs, Proofs and Types》。
因为讲演时间被要求在五分钟内,所以基本也没怎么介绍具体内容,只提了很多这个有意思的老师。
因为嗓子坏了没法声音出场,感谢凡哥的代替。
视频里提到的教授演讲地址:https://youtu.be/DllYOFw5Qio。
在上期模块,我们讨论了对象、属性、突变。但先别急着转移话题,关于对象的事情,我们还没说完呢。
先来看看这个小谜题,检测一下我们的心智模型:
1 | let pizza = {}; |
问问看你自己:这可能吗?
在上期的《属性》模块,我们说到 Sherlock Holmes 也搬到了 Malibu(马里步),但还没有解释这个谜团。
打开一个绘图软件,或者拿出纸笔。这次,我们一起逐步画图,以便你检查自己的心智模型。
即便你之前已经画过了,再来一次也不吃亏!
来见见闻名遐迩的伦敦神探 Sherlock Holmes(夏洛克·福尔摩斯):
1 | let sherlock = { |
是时候谈谈 JavaScript 中的相等性了。它为什么很重要呢?
想象一下,你在蒙面狂欢节上谈生意。你可能会和两个人交谈,却没意识到你其实两次都是在和同一个人谈。又或者是,你可能认为你在和一个人交谈,但其实是两个人!
如果没有一个清晰的 JavaScript 相等性的心智模型,那么每天就如同一场不咋样的狂欢节。你永远不确定要处理的是相同的值还是两个不同的值。到最后,你就经常会犯错误——比如,把你本来不想改的值给改了。
幸运的是,要建立这个 JavaScript 相等性模型,我们其实已经完成了大部分工作。「相等性」这个概念将用一种很自然的方式来嵌入到我们的心智模型中。
在本期模块中,我们将仔细研究 JavaScript 世界以及其中的值。但是,在此之前,我们需要指出一头房间里的大象——
JavaScript 世界究竟是不是真实的?
当我向 JavaScript 世界提问时,它会用一个值来回答我。我当然不是自己弄出这些值的。所有的变量、电线、值,它们一一构成了我的世界。我身处的 JavaScript 世界对我来说绝对是真实的——正如你所生活的世界对你而言也是真实的。
但有时,在执行下一条指令之前,会有片刻的寂静——那是下一个函数调用之前的滴答空当。就像是《黑客帝国》里的故障,我的整个世界暂停了片刻,在那一刻,我看到了比我的世界更大的景观。
本期模块,我们以下面的代码片段作为开头:
1 | let reaction = 'yikes'; |
你觉得结果会是什么?因为我们还没开始学,所以不确定的话也没关系。但可以试用你现有的 JavaScript 知识答一答。
现在我希望你花点时间,一步步地写下你对每一行代码的思考过程。同时注意你心智模型中的任何缺陷或者不确定的地方,并把它们写下来。如果你有任何疑惑的话,也试着尽可能清楚地表达出来。
在一开始,有了「值」。
什么是值(value)?很难说。
这就像是在问数学中的数是什么,或者几何中的点是什么。值就是 JavaScript 宇宙中的一个事物。
数字(numbers)是值。其他一些东西也是值,比如对象(object)和函数(function)。但是,也有许多东西(例如 if
语句或变量声明)都不是值。
为了把值与 JavaScript 程序中的其他东西区分开,我会想象 Antoine deSaint-Exupéry 画的「小王子」:
我站在一颗小行星上:它是我程序的代码。
这个系列叫《Just Javascript》,是 React 开发团队的成员 Dan Abramov 的一套试验性课程。目前仅在官网上通过邮件订阅的方式,向读者每周免费推送。后期可能会收费。
我阅读了前几期,觉得是个对 Javascript 入门者十分友好且有趣的阅读性课程。所以打算把它们翻译出来,仅供分享参考。如果你喜欢,可以在官网上订阅,并为作者提供读后反馈,更好地支持它走下去。
值得注意的是,因为是「试验性」的,所以语言其实并不严谨。更多地是大白话样地娓娓道来,没有晦涩难懂的底层剖析。所以从知识层面的角度来说,更适合学习了 JavaScript 有一段时间,但始终觉得入门比较困难,或者感觉对基础知识还是不怎么了解的朋友。而从叙述语言的角度上说,轻松易懂,对于 JavaScript 老手也是一个相当于「贴心小提示」的良好阅读材料,不仅如此,也可以查漏补缺,巩固基础。
除此之外,整个系列核心在于作者本人提出的一套「心智模型(mental model)」,它通过各种借喻和图画帮助我们更好地直观理解 JavaScript 中的各种概念。作者以「小王子」的故事为开头,构建了一个 JavaScript 宇宙,在这个系列中,你将在作者的带领下,一起用心智模型构建起这个宇宙。而且,更有价值的是,这套心智模型不同于传统课程上的各种复杂概念,相反,它很清晰、直观、易懂。在一开始接触到的模型哪怕到了后期学习,也十分通用。很难出现诸如「特例」的情况。
课程名叫《Just Javascript》,我把它译作「不就是个JS」。