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函数优雅内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- javascript 模块原理(详解JavaScript引擎V8执行流程)
- JavaScript 常用的开发规范
- javascript怎么生成html控件(JavaScript+html实现前端页面滑动验证2)
- javascript 开发网站(帮你提高开发效率的JavaScript20个技巧)
- js原生tab栏切换(JavaScript实现简易tab栏切换案例)
- javascript执行类的所有方法(Javascript中异步等待的深入理解)
- javascript如何获取后台数据(JavaScript实现异步获取表单数据)
- js打印斐波那契数列(JavaScript输出斐波那契数列的实现方法)
- web中如何预防xss攻击(详解前端安全之JavaScript防http劫持与XSS)
- web前端快速入门之html(Web前端开发规范2017HTML/JavaScript/CSS)
- js实现div(javascript拖曳互换div的位置实现示例)
- jspromise原理(JavaScript使用promise处理多重复请求)
- js实时获取页面宽度(JavaScript获取网页的宽高及如何兼容详解)
- javascript写游戏脚本(原生JS实现飞机大战小游戏)
- javascript登录转注册界面(JavaScript实现登录窗体)
- javascript 数组排序
- 天空是什么颜色(天空是什么颜色的英语)
- 高马尾扎发(高马尾扎发教程视频)
- 这里输入关键词(请手动输入关键词)
- 小说 顾瑾岚拿出一套飞行棋,别说你连飞行棋都不会哦(顾瑾岚拿出一套飞行棋)
- 金品公司 界界乐中秋限定飞行棋礼盒 露营藤篮礼盒全新上市(界界乐中秋限定飞行棋礼盒)
- 必看 8月,相比七夕,更需要注意的是这些事(必看8月相比七夕)
热门推荐
- sqlserver常用基本数据类型有哪些(浅述SQL Server的语句类别 数据库范式 系统数据库组成)
- mysql cache(MySQL取消了Query Cache的原因)
- sql server设置标识列(Sql Server 如何去掉内容里面的Html标签)
- nginx服务器有什么用(Nginx的作用详解,为什么在Web服务器中Nginx的比例越来越高?)
- mysql 高级用法(MySQL实现replace函数的几种实用场景)
- mysql 自定义排序
- CSS块级元素和行内元素
- nginx配置ip端口访问(Nginx配置80端口访问8080及项目名地址方法解析)
- 如何解决AJAX 的缓存
- docker镜像无法删除 Error:No such image:xxxxxx解决(docker镜像无法删除 Error:No such image:xxxxxx解决)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9