Javascript 使用currying技术返回语句

Javascript 使用currying技术返回语句,javascript,return,currying,Javascript,Return,Currying,在使用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语句,该行就会被执行,超出该行的所有内容

在使用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
ing另一个函数结束,然后直接再次调用该函数并生成结果

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语句)。其中两个函数恰好返回另一个函数。

它只结束自己的函数。尚未调用返回的函数

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

add(10)(20)(30);