Возвратите заявления с методами карри - PullRequest
0 голосов
/ 03 марта 2019

Во время обучения в 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, эта строка будет выполнена, а все, что находится за ее пределами, будет проигнорировано.

Ответы [ 4 ]

0 голосов
/ 03 марта 2019

Заканчивается только собственная функция.Возвращенная функция еще не вызвана.

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

add(10)(20)(30);
0 голосов
/ 03 марта 2019

Каждый раз, когда она возвращает новую функцию, она выполняется.

0 голосов
/ 03 марта 2019

Вы были бы правы, если бы одна функция имела несколько операторов возврата, но в этом случае есть несколько функций (каждая со своим собственным оператором возврата).Просто две функции возвращают другую функцию.

0 голосов
/ 03 марта 2019

Да, использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...