当前位置: 首页 > article >正文

函数式编程(4) 纯函数

纯函数:每次调用时结果总是一样

这个函数不纯:返回的值有变化

  这个函数不纯:因为使用了全局变量minAge

要让它变成纯函数需要

纯函数的好处

  • immutability/不变性
    如果创建了一个对象

js中的const阻止了重新分配一个对象给book, 而并不能阻止给更改其title属性

 在js中练习immutability

// const person = { name: "Y" };
// person.name = '' //如果使用函数式编程不应该 直接修改此属性

// 方法1  Object.assign
// const updated = Object.assign({}, person, { name: "b", age: "22" }); //Object.assign()此方法复制一个对象到另一个 复制person到{}

// 方法2 拓展运算符
// const updated = { ...person, name: "a" }; //...person已经复制了person
// console.log("updated: ", updated);

// 上面两种方法都是浅拷贝 即使浅拷贝了对象 但其中的address属性还是同一个,如果改变了其中一个引用的值,另一个也会改变 不能复制再嵌套一层的对象
const person = {
  name: "Y",
  address: {
    city: "la",
  },
};
// 1.shallow copy
// updated.address.city = "ny"

// 2.深拷贝
const updated = { ...person, address:{
    ...person.address,city:"ny"
} }; //...person已经复制了person

// const updated = { ...person, name: "a" }; //...person已经复制了person

console.log('person: ', person);
const numbers = [1,2,3]

// 添加6到2的前面
// const index = numbers.indexOf(2)
// // const added = [...numbers]
// const added = [...numbers.slice(0,index),//复制2之前的所有项
// 6,
// ...numbers.slice(index)//.slice返回下标后所有项
// ]
// console.log(added);

// 删除项
// const removed = numbers.filter(n => n!==2);
// console.log('removed: ', removed);

// 更改项
const updated = numbers.filter(n => n===2? 20:n);
console.log('updated: ', updated);

安装并引入 immutable.js后的练习


http://www.kler.cn/a/396415.html

相关文章:

  • Oracle19C AWR报告分析之Instance Efficiency Percentages (Target 100%)
  • 计算机网络HTTP——针对实习面试
  • html数据类型
  • MDK 5 各个历史版本下载地址
  • C++ 判断语句的深入解析
  • 【学习日记】notebook添加JAVA支持
  • docker与大模型(口语化原理和实操讲解)
  • CloudSim 里CloudletScheduler类
  • 使用importlib动态导入python类
  • Codeforces Round 987 (Div. 2)(前四道)
  • 开发需求总结17-vue echart报错:Cannot read property get ‘Attribute‘ of undefined
  • 基于PHP技术的校园站的设计与实现
  • ​‌华为交换机在Spine-Leaf架构中的使用场景​
  • 我谈二值形态学基本运算——腐蚀、膨胀、开运算、闭运算
  • java xml 文本解析
  • git如何开启SSH?
  • vcenter service基本异常处理
  • rom定制系列------红米10x 5G版本安卓12-miui14批量线刷固件
  • 鸿蒙实战:页面跳转
  • FromData格式提交接口时入参被转成JSON格式问题
  • 前端(3)——快速入门JaveScript
  • uni-app移动端与PC端兼容预览PDF文件
  • Rust 语言学习笔记(四)
  • Qt中实现旋转动画效果
  • Electron 项目启动外部可执行文件的几种方式
  • 网络安全之WINDOWS端口及病毒编写