javascript函数工具有哪些(如何让你的JavaScript函数更加优雅详解)
javascript函数工具有哪些
如何让你的JavaScript函数更加优雅详解目录
- 对象参数使用解构
- 命名回调函数
- 让条件句具有描述性
- 用 Map 或 Object替换 switch 语句
- 使用 Object.assign 设置默认属性
- 删除重复代码,合并相似函数;删除弃用代码
- 提炼函数
- 总结
准备写一个js技巧系列,主要就是总结js各种实用的小窍门、小妙招。本文主要是研究如何让我们的函数更清晰明了。
对象参数使用解构如果希望函数接收很多参数(如果超过两个),那么就应该使用对象。在此基础上,可以使用解构语法提取需要的参数。
普通写法
const greet = (obj) => { return `${obj.greeting}, ${obj.firstName}${obj.lastName}`; }
改写
const greet = ({ greeting, firstName, lastName }) => { return `${greeting}, ${firstName}${lastName}`; }
使用解构方式会更优雅,并且我们还可以少写很多重复的东西,命名也会更加清晰。
命名回调函数好的命名会使阅读代码更容易,回调函数的命名也是一样。
普通写法
const arr = [1, 2, 3].map(a => a * 2);
改写
const double = a => a * 2; const arr = [1, 2, 3].map(double);
分开命名,可以更好的一眼看出代码的含义,如上:根据名字很明显可以看出回调函数作用是用来加倍原始数组的每个元素的。
让条件句具有描述性对于复杂的条件判断,我们可以单独使用函数来表示,会让条件语句更具描述性。
普通写法
if (score === 100 || remainingPlayers === 1 || remainingPlayers === 0) { quitGame(); }
改写
const winnerExists = () => { return score === 100 || remainingPlayers === 1 || remainingPlayers === 0 } if (winnerExists()) { quitGame(); }
按原来的写法,我们有很长的表达式在括号里面,但是不太好看出它在判断的是什么。改写之后,我们把它放在一个命名函数中,根据名字我们就能大概看出表达的意思。
用 Map 或 Object替换 switch 语句当你的 switch语句很长时,就说明你应该简化你的代码了
普通写法
const getValue = (prop) => { switch (prop) { case 'a': { return 1; } case 'b': { return 2; } case 'c': { return 3; } } } const val = getValue('a');
Object改写
const obj = { a: 1, b: 2, c: 3 } const val = obj['a'];
我们使用switch嵌套多个带有多个return语句的块,只是为了获得给定prop值的返回值时,我们仅仅使用一个对象也可以实现同样的效果。
Map改写
const map = new Map([['a', 1], ['b', 2], ['c', 3]]) const val = map.get('a')
使用Map时,代码也短很多。我们通过传递一个数组,数组中的每项包含键和值。然后,我们仅使用Map实例的get方法从键中获取值。Map优于对象的一个好处是,我们可以将数字,布尔值或对象等其他值用作键。而对象只能将字符串或symbol作为键。
使用 Object.assign 设置默认属性普通写法
const menuConfig = { title: null, body: 'Bar' }; function createMenu(config) { config.title = config.title || 'Foo'; config.body = config.body || 'Bar'; } createMenu(menuConfig);
改写
const menuConfig = { title: 'Order', body: 'Send' }; function createMenu(config) { config = Object.assign({ title: 'Foo', body: 'Bar' }, config); // config : {title: "Order", body: "Bar"} // ... } createMenu(menuConfig);
不好的写法
var paging = function( currPage ){ if ( currPage <= 0 ){ currPage = 0; jump( currPage ); // 跳转 }else if ( currPage >= totalPage ){ currPage = totalPage; jump( currPage ); // 跳转 }else{ jump( currPage ); // 跳转 } };
改写
var paging = function( currPage ){ if ( currPage <= 0 ){ currPage = 0; }else if ( currPage >= totalPage ){ currPage = totalPage; } jump( currPage ); // 把jump函数独立出来 };
如果一个函数过长,不得不加上若干注释才能让这个函数显得易读一些,那这些函数就很有必要进行重构。
如果在函数中有一段代码可以被独立出来,那我们最好把这些代码放进另外一个独立的函数。
示例
比如在一个负责取得用户信息的函数里面,我们还需要打印跟用户信息有关的log
var getUserInfo = function(){ ajax( 'http:// xxx.com/userInfo', function( data ){ console.log( 'userId: ' + data.userId ); console.log( 'userName: ' + data.userName ); console.log( 'nickName: ' + data.nickName ); }); };
改写
我们可以把打印log的语句封装在一个独立的函数里。
var getUserInfo = function(){ ajax( 'http:// xxx.com/userInfo', function( data ){ printDetails( data ); }); }; var printDetails = function( data ){ console.log( 'userId: ' + data.userId ); console.log( 'userName: ' + data.userName ); console.log( 'nickName: ' + data.nickName ); };
引用参考:JavaScript Refactoring Tips — Making Functions Clearer and Cleaner《JavaScript设计模式与开发实践》
总结到此这篇关于如何让你的JavaScript函数更加优雅的文章就介绍到这了,更多相关JavaScript函数优雅内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- js宏任务都有哪些(JavaScript 操作宏任务与微任务)
- javascript如何判断类型(JavaScript如何优化逻辑判断代码详解)
- web前端快速入门之html(Web前端开发规范2017HTML/JavaScript/CSS)
- javascript写计算器教程(基于JavaScript实现简易计算器)
- html基础知识javascript(JavaScript+html实现前端页面滑动验证)
- javascript如何操作文档元素(JavaScript操作元素实例大全)
- jscanvas背景色(JavaScript canvas实现代码雨效果)
- js三级联动列表(基于JavaScript实现年月日三级联动)
- js实现div(javascript拖曳互换div的位置实现示例)
- javascript函数工具有哪些(如何让你的JavaScript函数更加优雅详解)
- js中事件的三个阶段(JavaScript中事件冒泡机制示例详析)
- js打印斐波那契数列(JavaScript输出斐波那契数列的实现方法)
- javascript变量值做函数名(JavaScript中变量提升和函数提升实例详解)
- js的模块模式设计(如何理解JavaScript模块化)
- 使用javascript数组循环(JavaScript数组reduce方法的语法与实例解析)
- javascript制作表格(JavaScript实现动态表格效果)
- 数学语文题目(语文的数学题)
- 香蕉(香蕉三种人不宜吃)
- 没钱可以快乐吗(没钱也能快乐吗)
- 快乐是什么(快乐就是)
- 东南亚有哪个国家(东南亚有哪个国家最发达)
- 东南亚安全吗(好不好挣钱)
热门推荐
- html5带放大镜的搜索代码(html5借用repeating-linear-gradient实现一把刻度尺ruler)
- filezilla搭建ftp服务器英文(客户端使用FileZilla连接ftp服务器过程图解)
- sql如何把重复数据记录删除(sql分组后二次汇总处理表重复记录查询和删除的实现方法)
- css3怎么构建阴影(详解css3 mask遮罩实现一些特效)
- vue-cli4开发多页面应用(深入理解Vue-cli4路由配置)
- js定时器几分钟执行(利用JS定时器实现元素移动)
- springboot与docker(详解SpringBoot项目docker环境运行时无限重启问题)
- SQL Server中找出执行时间过长的作业
- idea中tomcat快速部署(IDEA编辑器整合Apache Tomcat的详细教程)
- python中pip和pip3有什么区别(ISAPI-REWRITE伪静态规则写法以及说明)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9