使用描述性的长名称
定义函数的时候函数的名称要尽可能描述完整的函数用处,从而增加代码的可读性
// ❌function email(user){// implementation}// ✔️function sendEmailToUser(emailAddress){// implementation}
避免使用大量参数
限制使用参数数量很有必要,这么做使得测试函数时更加轻松
过多的参数将导致难以采用有效的测试用例
// ❌function test(arg1, arg2, arg3, arg4){// implementation}// ✔️let args = {arg1: 'Sylar',arg2: 1,arg3: true,arg4: 3}function test(args){// implementation}
- 应该避免三个以上的参数的函数,
- 通常来说超过两个参数的函数意味着功能过于复杂,需要重新调优
- 当确实需要三个以上的参数时,可考虑把这些参数封装为一个对象
使用默认参数代替条件选择
目的为了精简代码 ```javascript // ❌ function assignment(name) { let result = name || ‘Sylar’; }
// ✔️ function assignment(name = ‘Sylar’) { … }
<a name="fx4TW"></a># 保证函数功能的单一性功能不单一的函数导致难以重构、测试和理解。<br />编写函数时,应该保证一个函数只做一件事情。```javascript// ❌function myDay() {// eat// implementation// sleep// implementation// code// implementation}// ✔️function eat() {// implementation}function eat() {// implementation}function eat() {// implementation}function myDay() {eat();sleep();code();}
移除重复代码
用CV的方式来代替封装会
- 写出很多冗余的代码
- 需求更改,要修改所有的方法
不要使用Flag作为函数参数
使用Flag通常意味函数的功能单一性被破坏,
应该对函数进行功能的再次划分
// ❌function createFile(name, isPulic) {if (isPublic) {fs.create(`./public/${name}`);} else {fs.create(name);}}// ✔️function createFile(name) {fs.create(name);}function createPublicFile(name) {fs.create(`./public/${name}`);}
避免修改全局变量
应该以返回一个新的变量,避免污染全局。
应该全局变量是全局都可以访问,有可能在其它地方也会引用到。对全局变量代修改时可能会引起报错或意想不到的问题。
不要写全局函数
污染全局是一个不好的实践,可能会对其它库引起冲突。
要使用模块化
- IIFE
- class
- module
采用函数式编程
语雀内容
