外观
十月读书笔记:《代码整洁之道》与《你不知道的 JavaScript》
约 991 字
读书
十月读完两本老书:《代码整洁之道》和《你不知道的 JavaScript(上卷)》。 都是出版好些年的经典,重读加新读。这篇只记真有体感的部分, 顺便排几个雷。
《代码整洁之道》
命名这块,永远值得复习
书里说变量名要「名副其实」,道理谁都懂,但看看自己的代码:
const d = new Date() // d 是什么?date? duration? data?
const list = getItems() // list 是什么类型?数组?还是「清单」这个概念?我现在给自己立的规矩:
- 布尔值加
is/has/can前缀,isUserEligible; - 集合用复数,
users不叫userList(除非它真的不是数组); - 函数名是动宾结构,
getUserById,别叫user。
改完名自己读代码,顺畅度不一样。命名是写给三个月后的自己的情书, 到时候看不懂,当场社死。
函数要短,但别走火入魔
「函数只做一件事」是对的,但我见过有人强行把一个 80 行的函数 拆成 8 个五行的,每个都起个抽象名,跳来跳去反而更难读。 我的标准:一个函数一屏能看完(30 行左右),超过就该想想是不是 揽了太多活。拆不拆,看拆完是不是更好懂,不是看行数达标。
注释:最该省的是「翻译腔」注释
// 判断用户是否成年
if (user.age >= 18) { ... }这种注释删了不影响任何事。代码说清楚的地方,注释别复读。 真正值得写的注释是「为什么」:这行看着蠢,是因为某年某月某个 浏览器有 bug,链接在这。三个月后你自己会感谢自己。
排个雷
书里的例子是 Java,示例代码偶尔有点「老 OOP 味」, 比如过度推崇继承、嫌弃静态方法。看的时候带点批判, 结合自己写的 JS/TS 场景辩证吸收。
《你不知道的 JavaScript(上卷)》
作用域:词法作用域,背下来就完事
一句话:作用域在写代码的时候就定好了,跟运行时谁调用无关。 闭包之所以成立,也是因为这个。当年我背了三天面试题都没搞懂闭包, 看到这句话突然通了。有时候缺的就是一句人话。
this:别猜,看调用方式
this 不指向函数自己,也不看定义位置,只看怎么调的:
- 直接调:
fn(),严格模式下undefined,宽松模式全局对象; - 对象调:
obj.fn(),this是obj; new:this是新实例;call/apply/bind:听你的。
判断 this 的口诀:看调用点那行代码,. 前面是谁。 (箭头函数除外,它的 this 是定义时外层作用域的,这也是箭头函数 在回调里好用的原因。)
提升:var 和 let/const 的差别,实操建议
var 声明和赋值都「提升」(未赋值时为 undefined), let/const 只提升声明不提升赋值,声明前访问直接 ReferenceError (暂时性死区)。
实操就一条:别用 var。ES6 都多少年了,没有理由。 框架项目直接上 TypeScript,这些坑大部分被编译器和 lint 挡在门外。
排个雷
上卷讲作用域和 this 的部分非常值,但讲「类型」那几章有点啰嗦, typeof null === 'object' 这种历史梗翻来覆去讲。 时间紧的话,第二、三章精读,后面按需翻。
下月计划
- 《重构》:精读,配着自己的老代码边看边改,预计收益最大;
- 《CSS 世界》:张鑫旭的,工具书,随查随翻;
- 可能加一本《网络是怎么连接的》,补补网络基础的课。
读书这事,一年认真读十本比囤一百本强。共勉。