如何让你的代码变得更优雅?这些代码规范和技巧必须知道(进阶必备,建议收藏)上

简介: 笔记

1. 看你的代码就知道你几斤几两


1.1 面试常会犯的错


💂‍♂️:面试者

👨‍⚖️:面试官


面试前

💂‍♂️:先把简历写好,机构老师特别交代:一出去就要说三年工作经验👲

💂‍♂️:面试题要背,工资不能要低了~

💂‍♂️:包装一下

💂‍♂️:…


面试中

👨‍⚖️:问题回答的不错,可以看看你最近做的项目么?

💂‍♂️:这这这…

👨‍⚖️:或者你写的一些东西,github上有么

💂‍♂️(犹豫良久,拿出一个项目):您看下

👨‍⚖️(皱起了眉):这代码写的不对啊,考虑的不够完善…

💂‍♂️:呃呃呃…

👨‍⚖️(诧异):这里也有很明显的漏洞,这不像是一个三年经验的人写出的代码吧

💂‍♂️(满头大汗):这这这…

👨‍⚖️: 回去等通知吧(面试基本完犊子~)


很多小伙伴面试都只注重“面子”,不注重“里子“

简历搞的高大上,牛皮吹的震天响

一看代码,提几个问题,立马原形毕露

实际上,我们写的每一行代码就是我们实力的最好证明,你的经验,你的技巧,你的习惯,都会在代码中展现。

所以,想要提升,想升职加薪迎娶白富美,必须从改善代码习惯开始

20210709131916886.png

1.2 Javascript编码标准


实际上,编码标准是有争议的,每个人可能都有自己的标准,但对标准应该是什么样的,则似乎很少能达成共识。

但编码标准意味着,通过共同语言和一致的结构,把开发人员从无意义的工作中解放出来。把重心放在功能逻辑上去。

一个好的标准能提供清晰明了的意图,是有效工作所必需的。

比较好的Javascript编码应该符合以下标准:


编码错误的可能性降至最低(做好容错处理)

代码适合大规模的项目和团队(一致的、可读的、可扩展的、可维护的)

鼓励编码的效率、效果和复用(低耦合,高复用)

鼓励使用JavaScript的优点,避免使用它的缺点(缺点还是不少的,扬长避短)

开发团队通用,无排他性


2. 编程标准


2.1 使用一致的缩进和行长


代码被阅读的次数比编写它的次数要多得多

所以维护性、可读性是第一的(如果你不想被后面接手的人骂娘的话,就要做好这点)

不知道大家有没有发现,报纸上的文本列都在50~80个字符的长度之间。

对人类的眼睛来说,超过80个字符的某一行,看起来会逐渐变得吃力(有相关科学研究表明)

所以我们得出来的结论是:


每级代码缩进两个空格

每行限制为78个字符

这也是大厂通用写法,最为标准, 代码示例:

class Index extends Component {
  state = {
    navList: [
      { name: '全部', index: 0, key: 'all' },
      { name: '展示中', index: 1, key: 'sell' },
      { name: '已下架', index: 2, key: 'out' },
    ],
    pageTop: 0,
    navActive: 0,
    currentKey: 'all',
    page: 1,
    goodsData: {},
    hasMore: true,
    listLoading: false
  }
}

81.png

2.2 按段落组织代码


在编排代码的时候,要以清晰明白为目标,而不是减少代码的字节数

该有的空格、空白都不能少


按逻辑段落组织代码,段落之间要空行

每一行最多只包含一条语句或赋值语句,但是允许每行同时声明多个变量

运算符和变量之间要有空格,更容易地识别变量

每个逗号之后要有空格

在段落内,相似的运算符要对齐

缩进注释,缩进量和所解释的代码相同


82.png


3. 命名规范


3.1 变量


命名规则


变量名使用a - z、A - Z、0 - 9、下划线和$符号

变量名不要以数字开头

语义化(看其名,知其意)

作用域


当变量作用域是整个模块时使用驼峰式(模块名字空间的所有地方都可以访问该变量)

当变量作用域不是整个模块时使用下划线 (模块名字空间内的某个函数的局部变量)

确保所有模块作用域内的变量至少有两个音节,这样作用域就会很清晰(例如下:)

用户中心 ⇒ userCenter

商品列表 ⇒ goodsList

消息通知 ⇒ messageInfo

再来一组例子:


83.png

全局变量用 const 定义,常量性质,字母全部大写(尽量少定义)


3.2 命名空间


早期的JavaScript代码比较简单,单独在一张页面上使用,所以大部分时间不需要考虑命名空间的问题,使用全局变量,而不会有什么影响。

但是随着JavaScript应用的蓬勃发展和第三方类库的普遍使用,全局变量的数据可能会急剧上升

地域之门从此便开启了。(比如,当两个代码库声明了相同的全局变量时)

使用单一的全局函数,把其他所有变量的作用域限制在该函数里面,就可以极大地减少这种问题

// 模拟一个第三方库 => jQuery 
(function(window){
  // 此变量只会在此区域生效,使用完之后垃圾回收机制自动回收
  // 不会污染全局变量
  let jquery = {};
})(window)
  • 命名空间的细粒度划分
// 在 jquery.js 中
let jquery = (function () {
  // some code here 
}());
// 在 jquery.dom.js 中
let jquery.dom= (function () {
  // some code here 
}());
// 在 jquery.css.js 中
let jquery.css = (function () {
  // some code here 
}());

84.png

4. 松耦合,高复用


4.1 什么叫耦合?


指一程序中,模块及模块之间信息或参数依赖的程度(官方解释)

举个例子:

多个零件在一起,组成了一辆车,各零件之间存在耦合

电脑主机与显示屏,存在耦合

在程序语言中,也会有耦合,比如A模块依赖于B模块

我们通常是不需要耦合度很高的,除非特定组件,这样才可以达到高复用

举个例子,比如布加迪的轮胎,是找米其林高度定制的,只能适用于布加迪车型,其它品牌车型是用不了的(耦合度越高,复用性越低)


85.png

  • 而电脑主机与显示器,一般耦合度就很低了,A品牌电脑主机可以用B,C,D品牌各型号的显示器,所以复用性高,可以自由组合。

86.png

4.2 松耦合

  • 当修改一个组件而不需要更改其他组件时,就做到了松耦合
  • 耦合度视情况而定,复用性组件必须低耦合

如何松耦合?

  • 将JS从CSS中抽离:不要使用CSS表达式
//不好的做法
.box{width: expression(document.body.offsetWidth + ’px')}

将CSS从JS中抽离:通过JS修改CSS样式时,使用className或classList,不要逐条修改style样式

//不好的做法一
ele.style.color = 'red';
ele.style.left= '10px';
//不好的做法二
ele.style.cssText ='color:red;left:10px;';

]

.reveal{color:red;left:10px;}
//好的做法一
ele.className += 'reveal';
//好的做法二
ele.classList.add('reveal');
  • 将JS从HTML中抽离:从JS文件放入外置文件中
  • 将HTML从JS中抽离:不要在innerHTML中拼接DOM结构,而是使用字符串模板,如handlerbars

87.png

目录
相关文章
|
jenkins 持续交付
Jenkins 管理界面里提示“反向代理设置有误“的问题解决办法
Jenkins 管理界面里提示“反向代理设置有误“的问题解决办法
2012 0
Jenkins 管理界面里提示“反向代理设置有误“的问题解决办法
|
5月前
|
数据安全/隐私保护
智联万物的电气基石:RS485 总线阻抗匹配技术深度解码
RS485总线在工业自动化与能源管理中扮演关键角色,其差分传输技术具备抗干扰强、扩展性高和长距离通信优势。终端电阻配置是确保信号完整性和系统稳定的核心,120Ω阻抗匹配可显著降低误码率。实际应用中需遵循安装规范,避免常见误区,如错误阻值选择或全域安装。通过案例分析与前瞻性建议,规范化设计可提升系统可靠性90%以上,为工业智能化提供坚实保障。
181 0
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
411 0
|
存储 NoSQL MongoDB
【MongoDB 专栏】MongoDB 与微服务架构的结合
【5月更文挑战第11天】微服务架构流行趋势下,选择合适的数据库至关重要。MongoDB作为非关系型数据库,与微服务有天然契合度。其灵活的文档模型、水平扩展性、高性能及局部事务支持,满足微服务对数据模型多样性、高可用性、快速读写的需求。实践中,需注意数据划分、索引优化、监控调优和版本控制。未来,MongoDB在微服务中的应用将更广泛,新技术将提升其在微服务架构中的价值。
236 1
【MongoDB 专栏】MongoDB 与微服务架构的结合
|
负载均衡 算法 安全
能量感知调度(EAS) 【ChatGPT】
能量感知调度(EAS) 【ChatGPT】
|
Ubuntu 开发工具 git
git 超实用教程【人人必会!】(含大厂的 git 操作规范)
git 超实用教程【人人必会!】(含大厂的 git 操作规范)
425 0
|
Go
Golang深入浅出之-Go语言代码质量与规范:遵循Gofmt与Linting
【5月更文挑战第1天】本文讨论了如何使用`gofmt`和Lint工具提升Go代码质量。`gofmt`负责自动格式化代码,保持风格统一,而Lint工具如`golint`、`govet`、`staticcheck`则进行静态分析,检查潜在错误和未使用的变量。通过集成`gofmt`检查到CI/CD流程,避免格式冲突,并使用Lint工具发现并修复问题,如未处理的错误、不规范命名。遵循这些最佳实践,可提高代码可读性、团队协作效率和可维护性。
258 3
|
JavaScript
vue 在线聊天实战范例(含选择发送表情、图片、视频、音频,自定义右键快捷菜单,一键复制,左右聊天气泡)
vue 在线聊天实战范例(含选择发送表情、图片、视频、音频,自定义右键快捷菜单,一键复制,左右聊天气泡)
613 0
|
JavaScript
5. 解决 nativeTags 不被 Vue - Office 插件兼容的问题
5. 解决 nativeTags 不被 Vue - Office 插件兼容的问题
304 0
|
Java 关系型数据库 微服务
论后端未来发展及学习路线(详细讲解)
论后端未来发展及学习路线(详细讲解)