详解JavaScript降低函数复杂度的方法

详解JavaScript降低函数复杂度的方法

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

在本文中,我们将研究如何降低函数复杂度

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

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

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

立即学习“Java免费学习笔记(深入)”;

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降低函数复杂度的方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2718646.html

(0)
上一篇 2025年3月7日 22:17:38
下一篇 2025年2月27日 13:16:48

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎么遍历DOM

    相关推荐:《javascript视频教程》 我们知道可以使用document对象的内置方法通过ID,类,标签名和查询选择器来访问HTML元素。 DOM 是由节点树构成的,document 节点位于根,其他每个节点(包括元素,注释和文本节点)…

    2025年3月7日
    200
  • 实现原生js实现轮播图

    免费学习推荐:javascript视频教程 使用原生js实现轮播图 今天分享一个使用原生JS实现轮播图的案例,并且配上比较详细的过程讲解,欢迎小伙伴的浏览和批评指正。静态效果图如下: 核心思想 将一些图片在一行中平铺,然后计算偏移量再利用定…

    2025年3月7日 编程技术
    200
  • 记录JavaScript的学习笔记

    免费学习推荐:javascript学习教程 一、什么是JavaScript 1-1、JavaScript实现 虽然JavaScript和ECMAScript基本上是同义词,但JavaScript远不限于ECMA-262所定义的那样。完整的J…

    2025年3月7日
    200
  • DOM节点和元素之间有什么区别

    相关推荐:《javascript视频教程》 文档对象模型(DOM)是一个将HTML或XML文档视为树形结构的接口,其中每个节点都是文档的一个对象。DOM还提供了一组方法来查询树、改变结构、样式。 DOM 还使用术语元素(Element)它与…

    2025年3月7日
    200
  • JavaScript实现UTF-8编解码

    免费学习推荐:javascript视频教程 首先简单介绍一下UTF-8。UTF-8以字节为单位对Unicode进行编码。UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完…

    2025年3月7日
    200
  • 实现js的双线性插值和双三次插值法

    免费学习推荐:js视频教程 介绍双线性插值原理双三次插值法原理js实现 介绍 在网页中利用canvas进行绘图时,遇到一个问题,原始的数据分辨率很小,而图片要放大到整个网页,所以需要把数据进行插值放大。学习了双线性插值和三次内插法插值,两种…

    2025年3月7日 编程技术
    200
  • js基本数据类型有哪些

    js基本数据类型有:1、常用的基本数据类型包括undefined、null、number、boolean、string;2、引用数据类型也就是对象类型,比如Object、array、function、data等。 本文操作环境:宏基s40-…

    编程技术 2025年3月7日
    200
  • vue和javascript的区别是什么

    vue和javascript的区别:1、javaScript是运行在浏览器端的脚本语言,而Vue.js可以作为一个js库来使用,是一套构建用户界面的渐进式JavaScript框架;2、js要获取到DOM对象,而Vue是值和js对象进行绑定。…

    编程技术 2025年3月7日
    200
  • JavaScript介绍AJAX加载单张图片展示进度的方法

    免费学习推荐:js视频教程 用手机上网,经常看到加载进度条,尤其是加载图片的。 做过多张图片的加载进度,但是对于单张图片,特别是图片比较大的时候,需要进度条告诉用户加载进度,且可以提高用户体验。 传统的加载肯定不行,需要用到 AJAX 加载…

    2025年3月7日
    200
  • 使用JavaScript禁止复制网站内容的几种方法

    若是你不想别人复制你的网站内容,可以把这段js代码加到你网页上,即可屏蔽鼠标右键菜单、复制粘贴、选中等。 有时候的需求是网站中有些内容不希望别人复制,那么就需要用代码控制。 方法有多种: 第一种: 立即学习“Java免费学习笔记(深入)”;…

    2025年3月7日
    200

发表回复

登录后才能评论