《编写可维护的JavaScript》——野生JavaScript程序员必读
余果 书我是一个野生JavaScript程序员,我相信大多数JavaScript程序员都是野蛮生长,靠的是自身的好奇和勤勉。
什么是野生JavaScript程序员?我是这样定义的:基本靠自学;通过不停的console.log
和对比来写出凑合能运行的页面;页面上充斥着全局变量;命名风格随心所欲,受到自学的其他语言的影响;调试异常困难;只能写出耦合度低的小型页面;配置数据和代码耦合紧密,修改数据困难;随处定义变量;随意注释或者不注释;有大量从stackoverflow拷贝的代码……
对于野生JavaScript程序员,也许可以很开心地做自己的小项目,但当需要多人合作的时候,就会让团队陷入噩梦。因为“程序是给人读的,只是偶尔让计算机执行一下”,所以勉强能运行的程序不是我们的目标,我们的目标是写出可维护的JavaScript。之前也读过《代码整洁之道》,是针对所有语言的通用手册,比较泛泛而谈,但本书针对性很强,没有散弹枪,每一颗子弹都狙击到目标上:糟糕的JavaScript代码。
本书适合跟jslint配合使用,因为jslint能检查出很多人可能漏掉的细节:比如没有在function
顶部就声明所有的变量,比如缩进,比如没有声明“strict mode”。
下面说说印象比较深的几章:
第6章 避免使用全局变量
我之前知道JavaScript变量如果没有用var
来声明的话(而且全局没有同名变量),会隐式地创建全局变量,所以我就知道随处使用var
,本身告诉我,“所有的var语句都会提前到包含这段逻辑的函数的顶部执行”,所以应该在函数的顶部定义所有的局部变量。
而且,由于JavaScript没有块作用域,所以在for
循环和if
中创建变量是没有意义的,都应该提前到函数的顶部去定义。
那么如何避免全局变量呢?本章提出了几种解决方案:
- 避免意外的全局变量——声明“strict mode”
- 单全局变量方式——把所有的功能都封装到一个对象中
- 零全局变量——创建一个即时执行的匿名函数
第11章 不是你的对象不要动
说实话,我犯过这样的错误,我在创建一个iOS项目的时候,其中的webview的JavaScript代码需要在xcode的控制台输出信息,我就重写了console.log
这个函数,当时觉得这个小聪明很方便,后来却给我带来了无尽的麻烦,总之我后来又创建了一个新的对象ios来专门做这件事。
第9章 将配置数据从代码中分离出来
也是血泪教训,数据(比如颜色,宽度等)耦合到代码中,修改的时候异常困难,所以本章建议单独创建一个配置对象来修改数据,并且还提供了一些工具来把java配置文件转化成json数据。
本书值得经常翻一翻,而且篇幅短小,是非常不错的床头技术书。
余果
一个产品设计师。 了解详情