使用描述性的长名称
定义函数的时候函数的名称要尽可能描述完整的函数用处,从而增加代码的可读性
// ❌
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
采用函数式编程
语雀内容