- 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 的源头