Yuguo.us

《编写可维护的JavaScript》——野生JavaScript程序员必读

Introduction

user

余果

全栈工程师,《Web全栈工程师的自我修养》作者。


Featured

《编写可维护的JavaScript》——野生JavaScript程序员必读

Posted by 余果 on .

我是一个野生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数据。

本书值得经常翻一翻,而且篇幅短小,是非常不错的床头技术书。

user

余果

https://yuguo.us

全栈工程师,《Web全栈工程师的自我修养》作者。