Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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 对深嵌套高阶函数应用递归_Javascript_Algorithm_Functional Programming - Fatal编程技术网

Javascript 对深嵌套高阶函数应用递归

Javascript 对深嵌套高阶函数应用递归,javascript,algorithm,functional-programming,Javascript,Algorithm,Functional Programming,我正在解决Kolodny的Javascript练习(),特别是“值”练习 这个问题需要我创建一个函数,fn其中fn(值)将返回一个答案。如果value是标量(即4),它将返回4 如果value是一个函数,它将返回该函数的返回值。如果值是嵌套函数,它将返回深嵌套函数的值。例如: var fn = function() { return function() { return 4; }; }; assert.equal(value(fn), 4); 我天真地用以下方法解决了这个问

我正在解决Kolodny的Javascript练习(),特别是“值”练习

这个问题需要我创建一个函数,
fn
其中
fn(值)
将返回一个答案。如果
value
是标量(即4),它将返回4

如果
value
是一个函数,它将返回该函数的返回值。如果
是嵌套函数,它将返回深嵌套函数的值。例如:

var fn = function() {
  return function() {
    return 4;
   };
};
assert.equal(value(fn), 4);
我天真地用以下方法解决了这个问题:

exports.value = (val) => {
  if (typeof val == 'function') {
    if (typeof val() == 'function') {
      if (typeof val()() =='function') {
        if (typeof val()()() =='function') {
          return false
        } else {
          return val()()();
        }
      } else {
        return val()();
      }
    } else {
      return val();
    }
  } else {
    return val;
  }
}
这段代码要求可重用性有没有一种方法可以使用递归调用n个深度嵌套的匿名函数?

const value = v => typeof v === "function" ? value(v()) : v;
只需使用函数的结果再次调用
value

更具可读性:

function value(v) {
  if (typeof v === "function") {
    return value(v()); // !!!
  } else {
    return v;
  }
}

在测试它时,我得到一个错误“value未定义”。我假设是因为value导出了一个匿名函数?像这样
exports.value=(v)=>{…}
@agomez是的,然后做
const-value=exports.value=v=>…
,效果很好。我以前没想过要出口这样的价值,谢谢。这意味着“value”被设置为一个exports对象,它返回一个匿名函数,对吗?如果是这样,调用它的符号不是value.exports()?只是wondering@agomez不,它将是
exports.value()
否则:)