使用currying技术返回陈述

问题描述 投票:1回答:4

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

解决方案是这样的:

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语句,该行就会被执行,除此之外的所有内容都将被忽略。

javascript return currying
4个回答
2
投票

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

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

add(10)(20)(30);

1
投票

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

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

0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.