01--纯函数:无状态和数据不可变(statelessness、immutable data)

166 阅读1分钟
  • 1无状态:一个函数,不管你何时运行,它都应该像第一次运行一样,给定相同的输入,给出相同的输出
  • 2数据不可变:所有的数据都是不可变的,意味着如果你想修改一个对象,那你应该创建一个新的对象用来修改,而不是修改已有的对象。

纯函数:

  • 无状态:相同的输入,肯定有相同的输出,不依赖别的变量
function add(a, i) {
        return a + i
    } 
  • 数据不可变:如果想修改一个对象,应该创建一个新的对象用来修改,而不是修改已有的对象。不修改全局变量,不修改入参。
const newList = list.map(item => ({...item, type: 1, age:item.age + 1}));

  • 便于测试 测试驱动开发 TDD(Test-Driven Development ) 由于所有变量都是由参数传递的所以非常容易模拟环境
  • 可缓存性、可回退(Redo/Undo)
  • 更少Bug 共享状态往往是绝大多数 bug 的源头