Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript lodash flow函数的作用是什么?_Javascript_Lodash - Fatal编程技术网

Javascript lodash flow函数的作用是什么?

Javascript lodash flow函数的作用是什么?,javascript,lodash,Javascript,Lodash,我正在阅读一些使用lodash中的u.flow()的代码,文档中的解释对我来说毫无意义 医生说 创建一个函数,该函数返回调用给定 具有已创建函数的此绑定的函数,其中 后续调用将提供上一个调用的返回值 举个例子: function square(n) { return n * n; } var addSquare = _.flow([_.add, square]); addSquare(1, 2); // => 9 我已经读了好几遍了,我不知道它是什么意思,也不知道该函数如何返回9。

我正在阅读一些使用lodash中的u.flow()的代码,文档中的解释对我来说毫无意义

医生说

创建一个函数,该函数返回调用给定 具有已创建函数的此绑定的函数,其中 后续调用将提供上一个调用的返回值

举个例子:

function square(n) {
  return n * n;
}

var addSquare = _.flow([_.add, square]);
addSquare(1, 2);
// => 9

我已经读了好几遍了,我不知道它是什么意思,也不知道该函数如何返回9。我能想到的最接近的方法是折叠函数式编程,但这看起来不像那样。是否有其他方法可以解释流的作用?

用更简单的术语重新编写文档中的定义:它按顺序调用数组中的方法。它使用每个函数的结果作为下一个函数的参数。在给出的示例中,步骤如下:

  • 调用
    。添加(1,2)
    ,返回
    3
  • 将该返回值作为参数传递给数组中的下一个函数,该函数将变为
    square(3)
    。这将返回
    9

  • 以下是此功能代码的相关部分:

    return function(...args) {
        let index = 0
        let result = length ? funcs[index].apply(this, args) : args[0]
        while (++index < length) {
            result = funcs[index].call(this, result)
        }
        return result
    }
    
    返回函数(…args){
    设指数=0
    让结果=长度?funcs[index]。应用(此,args):args[0]
    而(++索引<长度){
    结果=funcs[index]。调用(此,结果)
    }
    返回结果
    }
    
    因此它首先将第一个函数应用于输入参数;然后调用其余函数,每个函数都使用前一阶段的结果

    这样做我可以看到以下好处: -如果需要,所有应用函数都将使用调用者的
    参数。
    -根据定义,它只返回一个函数。这允许延迟评估。可以传递流函数。实际计算只有在应用到参数时才会发生。

    它似乎在做:
    (1+2)^2=9
    。啊,那么它只是函数应用吗?是的,它基本上只是对任意数量的函数执行
    x(y(z))