Return 条带柯里化技术的语句

Return statements with currying techniques

在使用 FreeCodeCamp 学习时,我遇到了一个关于柯里化的问题。

解决方案是这样的:

function add(x) {
// Add your code below this line
return function(y) {
  return function(z) {
    return x + y + z;
    }
  }
}
add(10)(20)(30);

但是,我很困惑为什么这里的 return 语句没有终止函数的执行?

我的印象是,一旦您使用 return 语句,该行就会被执行,超出该行的所有内容都会被忽略。

是的,使用 return 确实结束函数执行,但返回值是一个函数本身,然后直接调用它,执行下一个函数,以 return 另一个函数结束,然后再次直接调用并产生结果。

add(10)(20)(30);

// evaluted to:
function(x) {
  return function(y) {
    return function(z) {
      return x + y + z;
    };
  };
}(10)(20)(30)

// evaluated to:
function(y) { // x = 10 through closure
   return function(z) {
     return x + y + z;
   };
}(20)(30);

// evaluated to
function(z) { // x = 10, y = 20 through closure
  return x + y + z;
}(30)

// evaluated to
60

每次它返回一个新函数时,它都会被执行。

如果一个函数有多个 return 语句,你是对的,但在这种情况下,有多个函数(每个函数都有自己的 return 语句)。其中两个函数恰好 return 另一个函数。

它只结束了自己的功能。返回的函数还没有被调用。

function add(x) {
    return function(y) {      // \
        return function(z) {  //  |
            return x + y + z; //  | part of the returned function
        };                    //  |
    };                        // /
}

add(10)(20)(30);