含义:

    1. IO函子,即输入与输出,函子内部始终维护一个函数,这个函数用于延迟执行,又称惰性函数
    2. of方法接收一个数据,这个数据可能是一个不纯的,因此将该数据包装到一个函数中,将不纯的异常隐藏起来,通过延迟执行来处理该不纯的异常
    3. 调用map方法,传递一个回调,通过函数组合形式依次调用组合函数
    4. 最后返回一个新的函子,调用value方法,得到一个新的数据 ```javascript /**
      • IO函子:I表示输入,O表示输出
      • 该函子与其他函子不同,该函子内部维护的值一个函数,该函数是是一个惰性函数,将不纯的数据作为返回值 */ const fp = require(‘lodash/fp’); class IO { // value是一个数据,这个数据可能是场景得到的,比如数据库,外部交互输入等 static of (value) { // 可以明显的调用IO类通过某个数据来初始化IO,只是将这个数据包装在一个函数里,等到将来需要时,调用函数得到这个数据 return new IO(() => value) } constructor(fn) { this._value = fn; } map(fn) { // 把当前的_value和调用map传入的fn组合成函数,依次从右到左执行 return new IO(fp.flowRight(fn, this._value)) } }

    // 调用 // 调用map 传递一个函数,这个函数有可能是纯函数也有可能是不存函数 const res = IO.of(process).map(item => item.version); console.log(res._value()) // 调用_value,得到一个数据,这种做法成为延迟执行 ``` 总结:

    1. 通过将不纯操作延迟执行,从而达到将副作用设置在可控的范围内,这是一件很有意义的事情