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

  • 2. 编程标准

  • 3. 命名规范

  • 4. 松耦合,高复用

  • 5. 函数优化

  • 6.条件优化

  • 7. 循环优化

  • 8. 如何提升js性能

在这里插入图片描述

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


1.1 面试常会犯的错

💂‍♂️:面试者

👨‍⚖️:面试官

  • 面试前

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

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

💂‍♂️:包装一下

💂‍♂️:…

  • 面试中

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

💂‍♂️:这这这…

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

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

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

💂‍♂️:呃呃呃…

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

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

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

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

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

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

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

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

在这里插入图片描述

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

}

}

在这里插入图片描述

2.2 按段落组织代码

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

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

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

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

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

  • 每个逗号之后要有空格

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

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

// 把一个或多个声明放在一行上,但每行只有一条赋值语句

let

z, x, c, v, d,

a = l,

b = 2,

arr = [1, 2, 3],

obj = {aa: 1, bb: ''张三"},

name = “法外狂徒张三”

;

// 在下一行段落的前面添加空行

// 函数将文本写入消息容器

print_msg = function ( msg_text ){

// 缩进注释,和它所描述的段落层级一致

// .text() 防止xss注入

$(‘#sl’).text( msg_text );

};

// 函数返回随机数

get_rangdom = function ( num_arg ){

return Math.random() * numn_arg;

};

// 初始化值

x = get_random( 10 );

y = get_random( 20 );

r = get_random( 360 );

// 添加空白,对齐相似的元素,相似的语句更容易阅读

x += 10 + num;

y -= 20 - num;

2.3 换行要一致

  • 在运算符的前面换行,开发者检查更加方便

  • 把后续的语句缩进一个层次,比如使用两个空格

  • 在逗号分隔符的后面换行

  • 方括号或者括号单独占一行。清楚地表明这是语句的结尾,不会迫使读者横向扫寻分号

// 将运算符放在左边,排成一列

let str = ‘我知道你也在向我靠近,’

  • ‘星河万顷都是你的见面礼。’

  • ‘所以我也走向了你,’

  • ‘暮色千里皆是我的回礼。’

  • ‘今夜星光月夜皆归你,我也归你~’

// 方括号单独占一行,下一条语句就容易识别了

// 使用尾部逗号,更容易维护

let addressArr = [

‘湖南省’, ‘湖北省’, ‘广西省’,

‘江西省’, ‘江苏省’, ‘内蒙古自治区’,

‘台湾省’, '澳门, ‘香港’,

];

在这里插入图片描述

3. 命名规范


3.1 变量

命名规则

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

  • 变量名不要以数字开头

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

作用域

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

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

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

  • 用户中心 ⇒ userCenter

  • 商品列表 ⇒ goodsList

  • 消息通知 ⇒ messageInfo

  • 再来一组例子:

| 变量初始名 | 局部作用域 | 模块作用域 |

| — | — | — |

| str | direction_str | directionStr |

| id | goods_id | goodsId |

| msg | user_msg | userMsg |

  • 全局变量用 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

}());

在这里插入图片描述

4. 松耦合,高复用


4.1 什么叫耦合?

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

  • 举个例子:

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

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

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

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

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

  • 在这里插入图片描述

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

  • 在这里插入图片描述

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

在这里插入图片描述

5. 函数优化


5.1 提炼函数

  • 在javascript开发中,大部分时间都在与函数打交道,所以希望这些函数有着良好的命名,函数体内包含的逻辑清晰明了

  • 如果一个函数过长,不得不加上若干注释才能让这个函数显得易读一些,那这些函数就很有必要进行重构

  • 如果在函数中有一段代码可以被独立出来,那最好把这些代码放进另外一个独立的函数中,这是一种很常见的优化工作。

  • 项目越大,必须拆分得越细,好维护(函数也是如此)

  • 千万不要一个函数从奶奶家写到外婆家去了

这样做的好处主要有以下几点:

  • 避免出现超大函数

  • 独立出来的函数有助于代码复用

  • 独立出来的函数更容易被覆写

  • 独立出来的函数如果拥有一个良好的命名,它本身就起到了注释的作用

比如在一个负责取得用户信息的函数里面,还需要打印跟用户信息有关的信息,那么打印的语句就可以被封装在一个独立的函数里:

let getUserInfo = function(){

ajax( ‘http:// xxx.com/userInfo’, function( data ){

console.log( 'userId: ’ + data.userId );

console.log( 'userName: ’ + data.userName );

console.log( 'nickName: ’ + data.nickName );

});

};

//改成:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

总结

=============================================================

从转行到现在,差不多两年的时间,虽不能和大佬相比,但也是学了很多东西。我个人在学习的过程中,习惯简单做做笔记,方便自己复习的时候能够快速理解,现在将自己的笔记分享出来,和大家共同学习。

个人将这段时间所学的知识,分为三个阶段:

第一阶段:HTML&CSS&JavaScript基础

第二阶段:移动端开发技术

第三阶段:前端常用框架

  • 推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;如果因为我的笔记太过简陋不理解,可以关注我以后我还会继续分享。

  • 大厂的面试难在,针对一个基础知识点,比如JS的事件循环机制,不会上来就问概念,而是换个角度,从题目入手,看你是否真正掌握。所以对于概念的理解真的很重要。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

来,和大家共同学习。

个人将这段时间所学的知识,分为三个阶段:

第一阶段:HTML&CSS&JavaScript基础

第二阶段:移动端开发技术

第三阶段:前端常用框架

  • 推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;如果因为我的笔记太过简陋不理解,可以关注我以后我还会继续分享。

  • 大厂的面试难在,针对一个基础知识点,比如JS的事件循环机制,不会上来就问概念,而是换个角度,从题目入手,看你是否真正掌握。所以对于概念的理解真的很重要。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-IJz09ArN-1712762007422)]

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值