从头开始撰写comp,如何传递参数?

时间:2020-08-11 07:41:20

标签: javascript algorithm scope closures

我的任务是必须从头开始编写撰写,这是要求:

编写Compose和Pipe函数。

第1步:实现功能Compose:

Compose应该返回一个由列表组成的函数 任意长度的函数。

在随后的函数的返回值上调用每个函数。

您可以将compose视为通过其参数从右向左移动。

撰写示例:

var greet = function(name){ return 'hi: ' + name;}
var exclaim = function(statement) { return statement.toUpperCase() + '!';}
var welcome = compose(greet, exclaim);
welcome('phillip'); // 'hi: PHILLIP!'

我主要是凭直觉就能使事情正常进行,这是我的解决方案:

var compose = function() {
  var args = arguments
  return function(param) {
    var result = param
    for (let i = args.length -1; i >=0; i --) {
      result = args[i](result)
    }
    return result
  }

};

我不明白的是:“菲利普”如何传递给参数? Compose没有任何访问方式

2 个答案:

答案 0 :(得分:0)

const compose = (...funcs) => params =>
  funcs.reduceRight((value, func) => func(value), params)

首先,我与您对函数compose的实现有所不同。

参数params作为initValue函数的第二个参数reduceRight传递,因此使用它进行第一个函数调用。请注意,第一个函数调用是对funcs数组中的最后一个函数。

用法:

compose(x => x**2, x => x/2)(2); // returns 1

答案 1 :(得分:-1)

您必须将结果从 exclaim 函数传递到问候函数作为参数

const greet = (name) => 'hi: ' + name;
const exclaim = (statement) => statement.toUpperCase() + '!';
const compose = (f1,f2) => (name) => f1(f2(name))
const welcome = compose(greet, exclaim);
welcome('phillip');
// 'hi: PHILLIP!'