千家信息网

JavaScript重构技巧中如何降低函数复杂度

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家介绍JavaScript重构技巧中如何降低函数复杂度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript 是一种易于学习的编程语言,编写运行并执行某些
千家信息网最后更新 2026年11月02日JavaScript重构技巧中如何降低函数复杂度

这篇文章给大家介绍JavaScript重构技巧中如何降低函数复杂度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

JavaScript 是一种易于学习的编程语言,编写运行并执行某些操作的程序很容易。然而,要编写一段干净的JavaScript 代码是很困难的。


将重复的代码移到同个位置

我们应该将重复的代码提取出来,合并放到同个位置,这样当有需要修改的,我们只需要改一个地方即可,同时也减少犯错率。

假设我们有可能很写出下面的代码:

const button = document.querySelector('button'); let toggled = true; button.addEventListener('click', () => {   toggled = !toggled;   if (toggled) {     document.querySelector("p").style.color = 'red';   } else {     document.querySelector("p").style.color = 'green';   } })

上面代码中有两个document.querySelector("p"),我们可以这样优化,把document.querySelector("p") 保存到一个变量中,然后使用该变量即可,如下所示:

const button = document.querySelector('button'); const p = document.querySelector("p"); let toggled = true; button.addEventListener('click', () => {   toggled = !toggled;   if (toggled) {     p.style.color = 'red';   } else {     p.style.color = 'green';   } }

这样我们就不必写长长的document.querySelector("p"),只需写个变量 p 就行了。

另一个常见的代码实例中的数字,光看数字我们很难知道其表示的含义:

let x = 1; let y = 1; let z = 1;

我们不知道上面这三个一表示什么,所以我们可以移除重复的代码,并用一个合适的变量名来表示,如下所示:

const numPeople = 1; let x = numPeople; let y = numPeople; let z = numPeople;

这样我们就可以知道 numPeople 的值为1,其表示的人的数量。

简化函数

函数应尽可能简单,最好只做一件事,行数也不要太多,最多不能超过 30 行。

我们不应该使用 ES5 类的方式,也不应将「IIFE」用于模块或块。相反,我们应该使用类语法,其中可以在类中包含该类的多个实例方法。这会大大减少了函数的体量。

同样,只要我们可以定义函数,函数就应该是纯函数,这意味着他们不应该产生副作用。

例如,最好的简单函数是如下:

const add = (a, b) => a + b;

上面的函数没有任何副作用,因为它不会在函数外部修改任何变量。另外,它也是一个纯函数,对于相同的输入,输出的结果也都一样的。

使用卫语句代替嵌套语句

卫语句的定义用法:

卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句

有时候条件式可能出现在嵌套n次才能真正执行,其他分支只是简单报错返回的情况,对于这种情况,应该单独检查报错返回的分支,当条件为真时立即返回,这样的单独检查就是卫语句(guard clauses).卫语句可以把我们的视线从异常处理中解放出来,集中精力到正常处理的代码中。

比如我们可能会编写如下的代码 :

const greet = (firstName, lastName, greeting) => {   if (typeof firstName === 'string') {     if (typeof lastName === 'string') {       if (typeof greeting === 'string') {         return `${greeting}, ${firstName}${lastName}`;       }     }   } }

我们可以这样优化

const greet = (firstName, lastName, greeting) => {   if (typeof firstName !== 'string') {     throw new Error('first name is required');   }   if (typeof lastName !== 'string') {     throw new Error('last name is required');   }   if (typeof greeting !== 'string') {     throw new Error('greeting is required');   }   return `${greeting}, ${firstName}${lastName}`; }

在第二个示例中,如果每个参数都不是字符串,则抛出错误,从而消除了嵌套的if语句。

这将嵌套的if语句在执行相同操作时减少为没有嵌套的if语句。

嵌套很难阅读和理解,我们应该在所有地方都摆脱它们。

总结

重复的代码总是不好的。我们应该永远记住"不要重复自己(DRY)"的原则。

另外应该使用一些新的方式来代替 ES5 时代的写法。

最后,应将嵌套的if语句替换为卫语句,因为它们可以执行与嵌套的if语句相同的检查,这样有利于阅读。

关于JavaScript重构技巧中如何降低函数复杂度就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

语句 函数 代码 变量 复杂 条件 相同 多个 就是 表达式 检查 复杂度 技巧 重构 个位 内容 分支 副作用 地方 实例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网和科技创新 科技服务与互联网 广州宏创互联网科技 浩特互联网科技 互联网科技公司做什么 互联网巨头投资的硬核科技 云创客互联网科技公司 农村开互联网科技讲堂 恒银科技与互联网金融 互联网还是高科技吗 浙江互联网科技研学营 山东子淼互联网科技有限公司 云南省自由互联网科技有限公司 互联网风格科技公司名称 西安有哪些互联网高科技企业 互联网科技平台产品运营 承德科技产业互联网平台 互联网科技创新方面的资料 知域互联网科技有限公司官网 每日互联网科技新闻 中智农互联网科技 河南云网互联网络科技有限公司 西安纸贵互联网科技有限公司 郑州华宇互联网科技 晓花互联网科技有限公司网址 中国互联网十大科技股排名 佛山市翊博互联网络科技有限公司 四川慕妮娅互联网科技有限公司 互联网领先科技宣传片 绵阳真晨互联网科技有限公司
0