相同的输入总会得到相同的输出,并且不会产生副作用的函数,就是纯函数。
我们可以通过一个是否改变原始数据的两个同样功能的方法来区别纯函数和非纯函数。
我们期待封装一个函数,能够获取传入数组的最后一项。那么可以通过一下两种方式

function getLast(arr){return arr[arr.length];
}function getLast_(arr){return arr.pop();
}var source = [1, 2, 3, 4, 5];
var last = getLast(source);
var last_ = getLast_(source);

getLast和getLast_虽然都能够获取数组的最后一项值,但是getLast_改变了原数组。而当原数组被改变,我们再次调用该方法时,得到的结果就会变得不一样。这种不可预测的封装方式是非常糟糕的,他会把我们的数据搞得非常混乱、在javascript原生支持的数据方法中,也会有许多不纯的函数,我们在使用的时候要非常的小心,要清晰的知道原始数据的改变是否会留下隐患。

var source = [1, 2, 3, 4, 5];
source.splice(1,3) ; //纯函数,source不变
source.splice(1,3); // 非纯函数,source 改变你
source.pop();// 非纯函数,source改变
source.push(); // 不纯
source.shift(); // 不纯
source.unshift(1) ;// 不纯
source.reverse(); // 不纯// 不能知道短时间现在source 被改变成什么样子,干脆重新约定一下
source = [1,2,3,4,5]
source.concat([6,7]); 纯函数  source不变`在这里插入代码片`
source.join('-'); 纯函数 source不变

与这种会改变原始数据的函数相比,纯函数明星更加可靠,很显然我们都不希望自己的数据在经过几次调用之后就会变得一团糟。

var name = "Jake";
function sayHello() {return "Hello, " + name;
}sayHello(); // Hello, Jake// 当我们有其他需求的时候
name = "Ken";
sayHello();

当时很明显这也不是我们想要的,name是一个全局变量,此时我们应该减少使用name这种全局变量,所以我们应该使用局部变量去使用参数

function sayHello(name){return "Hello, " + name;
}

js系列十七:纯函数相关推荐

  1. js系列十七:函数是一等公民

    所谓的一等公民,其实就是普通函数,也就是说,函数其实就是没有什么特殊的,我们可以像对待其他数据类型一样对待函数. 1 可以把函数赋值给一个变量 var fn = function () {}; 2 ` ...

  2. [js] 纯函数和函数式编程有什么关系?

    [js] 纯函数和函数式编程有什么关系? 函数式编程是一种编程思想,纯函数是这种思想的基本要实现函数式编程,我们所封装的方法应该是抽象的,应该是和外部状态无关系的,也就需要是纯函数的,这样才能保证抽象 ...

  3. js系列教程4-函数、函数参数全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  4. 05【JS 高级】-【PC端网页特效】元素偏移量 offset 系列, 元素可视区 client 系列, 元素滚动 scroll 系列, 动画函数封装, 常见网页特效案例

    04[JS 高级]-[PC端网页特效] 学习内容: 元素偏移量 offset 系列, 元素可视区 client 系列, 元素滚动 scroll 系列, 动画函数封装, 常见网页特效案例 1. 元素偏移 ...

  5. 【基于JS 函数式编程 -1】什么是函数式编程 | 纯函数 | 命令式与声明式 | 优点

    ⭐️ 本文首发自 前端修罗场(点击即可加入),一个专注 Web 技术.答疑解惑.面试辅导.职业发展的社区. 相关文章 [函数式编程]基于JS 进行函数式编程(一)引入 | 什么是函数式编程 | 函数式 ...

  6. 你不知道的JS专栏 - 避免bug利器纯函数

    你不知道的JS专栏 - 避免bug利器纯函数 目录: 纯函数的概念及基本认识 纯函数在实际开发中的使用案例 纯函数在框架中的使用, 以及框架中的纯函数思想 纯函数的概念及基本认识 纯函数定义 - 不依 ...

  7. JS高级——纯函数、柯里化(手写自动柯里化函数)、组合函数(手写自动组合函数)

    一.理解JavaScript纯函数 函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念: 在react开发中纯函数是被多次提及的: 比如react ...

  8. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十七】

    <Web 前端开发精华文章推荐>2013年第五期(总第十七期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  9. react中纯函数_如何在纯React中创建电子邮件芯片

    react中纯函数 by Andreas Remdt 由Andreas Remdt 如何在纯React中创建电子邮件芯片 (How to create email chips in pure Reac ...

最新文章

  1. “机器人之夜”看猎豹跑得快还是五款机器人价格降得快?“鸿门宴”正式上演
  2. C++11新标准 default 和 delete的使用
  3. [RabbitMQ]什么是MQ
  4. TIOBE 3 月编程语言排行榜:主流 Java、C++ 惨遭嫌弃,Python 势头迅猛
  5. 利用mdadm工具构建RAID 0/1/5/6/10磁盘阵列实战(超详细)
  6. python之join()用法
  7. 系统分析师教程(张友生)高清pdf下载
  8. rubyinstaller官网无法访问的解决办法
  9. 编程彩虹c语言,c – 如何渲染彩虹光谱?
  10. HyperV虚拟机连接时主机无法连接网络 2022-06-13
  11. 旁观面经-02-开发岗总结版
  12. GPS的一些浅显知识兼介绍一下GPS测试仪
  13. children的childNodes区别
  14. java面试题----选择题02
  15. 逆向学习litevm篇
  16. mysql数据库命中率_Oracle数据库关于命中率的查询语句总结
  17. HCIA 学习笔记 (26-37) 静态路由、RIP、OSPF
  18. seek是python文件操作方法吗,seek引发的python文件读写的问题
  19. 高清壁纸软件 FreshBackMac for Mac 1.9.2免费版
  20. 邮件服务器的SMTP服务器和POP3服务器

热门文章

  1. Django(5)-路由配置实例
  2. [英语单词] Kernel:upstream/downstream;上下游
  3. [UnityShader]多Pass处理透明度
  4. idea怎么安装使用python
  5. 汪峰章子怡或登湖南春晚 跨年费用仅往年1/3
  6. 计算机网络病毒的十项防范措施
  7. 壮美大山包-2017中国大山包国际超百公里ITRA积分赛赛记
  8. 吴文虎1-10视频下载链接
  9. 物理引擎系统-ode
  10. HTML5网页设计阶梯教程(4)——创建表格和设置单元格的大小