curry函数能不能中途执行?

Can curry functions be executed half way?

假设我有这样的函数:

function foo(){
  return () => {
    return "bar"
  }
}

foo()() // => "bar"

有没有办法在不使用参数的情况下 return 函数以外的东西?

foo()() // => "bar"
foo()   // => "foo"

没有。如果值 returned 以后必须可以调用,那么它必须是一个函数 - 没有例外。

不过你可以在函数上加上 属性。

function foo(){
  return Object.assign(
    () => {
      return "bar"
    },
    { prop: 'bar' }
  );
}

console.log(foo()());
console.log(foo().prop);

或者return既是函数又是其他东西。

function foo(){
  return [
    () => {
      return "bar"
    },
    'bar'
  ];
}

const [fn, val] = foo();
console.log(fn());
console.log(val);