首页 > 其他分享 >js 优化

js 优化

时间:2023-11-23 20:03:09浏览次数:29  
标签:function return 函数 sum list js obj 优化

提炼函数
把条件分支语句提炼成函数
合理使用循环
提前让函数退出代替嵌套条件分支
传递对象参数代替过长的参数列表
少用三目运算符
合理使用链式调用
分解大型类
活用位操作符
纯函数

(1). 提炼函数:

①. 避免超大函数.
②. 独立出来的函数有助于代码复用.
③. 独立出来的函数更容易被覆写.
④. 独立出来的函数如果拥有一个良好的命名,它本身就起到了注释的作用.
⑤. 语义化将多段分离的逻辑放在不同的函数中实现,可以使代码逻辑清晰,清楚的看到每一步在做什么.
function getData() {
    return $.ajax.get('/getData').then((res) => res.data.list);
}
function showList(list) {
    const ul = document.getElementById('ul');
    ul.innerHTML = list.map(text => `<li class="li">${text}</li>`).join('\n');
}
async function main() {
    const list = await getData(); // 获取数据
    showList(list); // 显示页面
    ...
}

(2). 把条件分支语句提炼成函数:

①. 复杂的条件分支语句难以阅读和理解
②. 将条件分支语句提炼成语义化的函数,使代码更加直观、逻辑清晰.
// 是否是夏天
function isSummer() {
    var date = new Date();
    return date.getMonth() >= 6 && date.getMonth() <= 9;
}
// 提炼条件后
function getPrice(price) {
    if (isSummer()){
        return price * 0.8;
    }
    return price;
}

(3). 提前让函数退出代替嵌套条件分支:

function del(obj){
    var ret;
    if (!obj.isReadOnly){ // 不为只读的才能被删除
        if (obj.isFolder){ // 如果是文件夹
            ret = deleteFolder(obj);
        }else if (obj.isFile) { // 如果是文件
            ret = deleteFile(obj);
        }
    }
    return ret;
};

function del(obj){
    if (obj.isReadOnly) { // 反转if表达式
        return;
    }
    if (obj.isFolder) {
        return deleteFolder(obj);
    }
    if (obj.isFile) {
        return deleteFile(obj);
    }
}

(4). 传递对象参数代替过长的参数列表:

①. 函数参数过长,需要保证传递的顺序正确,代码可读性也会变差.

②. 一般函数参数最好不要超过3个,超过使用对象.
setUserInfo({
    id: 1314,
    name: 'sven',
    address: 'shenzhen',
    sex: 'male',
    mobile: '137********',
    qq: 377876679
})

(5). 纯函数:

①. 定义:
    a. 纯函数是指不依赖于且不改变它作用域之外的变量状态的函数.
    b. 纯函数的返回值只由它调用时的参数决定,它的执行不依赖于系统的状态(执行上下文).
    c. 相同的输入参数,一定会得到相同的输出,也就是内部不含有会影响输出的随机变量.
var a = 1;
// 非纯函数
function sum(b) {
    return a + b;
}
// 非纯函数
function sum(b) {
    a = 2;
    return b;
}
// 非纯函数
function sum(b) {
    return b + Math.random();
}
// 纯函数
function sum (b, c) {
    return b + c;
}

标签:function,return,函数,sum,list,js,obj,优化
From: https://blog.51cto.com/u_16251183/8532223

相关文章

  • postman 出现Enable JavaScript and cookies to continue 如何反爬(js反爬)
    网页无法F12,禁止调试出现debug怎么办直接F8禁用,ctrl+F8开启调试断点网站禁止ip访问,并且关闭了icmp回包,调试最好禁用缓存,以便实时更新用postman单独访问首页的index的首页也是无法获取网页内容考虑网页使用js进行跳转实例:比如使用postman请求https://www.phind.com/简......
  • js关系运算符
    关系运算符:==等于>大于<小于>=大于等于<=小于等于!=不等于===全等例子:等于: 大于: 小于: 大于等于: 小于等于: 不等于: //全等 //全等和等于的区别://==在js中,只是对值,进行比较......
  • bpmnjs
    在bpmn.js中,`bpmnModeler.get()`方法用于获取不同的模块,你可以通过这些模块来访问和操作BPMN模型的不同部分。以下是一些常用的模块和对应的用途:1.**Canvas模块:**```javascriptvarcanvas=bpmnModeler.get('canvas');```用于访问BPMN模型的画布,可以进行与......
  • nuxt3构建优化
    1.性能分析network分析 Lighthouse分析利用浏览器的Lighthouse工具不仅能够了解到首屏渲染速度等信息,并还能提供相应优化建议   Bundle分析    在nuxt3不需要自行下载第三方依赖也能够进行Bundle分析 配置:在nuxt.config.ts下写入exportdefaultdefi......
  • js 对象数组排序
    //排序,根据name名称中的数字排序sortList(a:any,b:any){if(a?.name&&b?.name){constaStr=a.name.replace(/[^\d]/g,'')constbStr=b.name.replace(/[^\d]/g,'')......
  • Volatile(编译优化阶段)
    作用:告诉编译器该变量是容易发生变化的,不能对该变量进行优化,每次取值都必须从内存中取值而不是直接去取之前在寄存器中的值例子:Volatileinta=20,b,c;b=a;C=a;代码执行流程如下;B=a;先从a的内存中取值存放到寄存器,再把寄存器的值给存到b的内存C=a;把寄存器的值给存到b的......
  • js判断在手机端/移动端,还是PC端
    varsystem={win:false,mac:false,xll:false};varp=navigator.platform;system.win=p.indexOf("Win")==0;system.mac=p.indexOf("Mac")==0;system.x11=(p=="X11")||(p.indexOf("Linux")==0);if(system.win||system......
  • js 数组、字符串常用方法
    JavaScript数组的常用操作增:push()向数组的末尾添加一个或更多元素,并返回新的长度unshift()在数组开头添加任意多个值,然后返回新的数组长度splice()传入三个参数,分别是开始位置、0(要删除的元素数量)、插入的元素,返回空数组concat()首先会创建一个当前数组的副本,然后再把它......
  • threejs—01—概念
    一、物体如何移动所有的物体不管是PerspectiveCamera()还是mesh()构造函数,都是继承Object3D()的。因为继承,所以,camera实例和mesh实例,不仅可以访问自己构造函数的函数原型prototype对象里的东西,也可以访问Object3D()函数的属性。其中,Object3D()函数有一个position属性很重要,通......
  • 在Vue中使用Mock.js虚拟接口数据实例详解
     在Vue项目中使用Mock.js可以方便地模拟接口数据,用于前端开发和测试。Mock.js是一个生成随机数据的库,可以帮助我们快速构建虚拟接口数据。在本文中,我将通过一个实例来详细讲解在Vue中使用Mock.js虚拟接口数据的方法。首先,我们需要创建一个Vue项目。可以使用VueCLI来快速创建......