Применение рекурсии для глубоко вложенных функций высшего порядка - PullRequest
0 голосов
/ 24 мая 2018

Я решаю упражнения Колодного по Javascript ( здесь ), в частности, упражнение «ценность».

Проблема требует, чтобы я создал функцию, fn, где fn(value) вернет ответ.Если value является скаляром (то есть 4), он вернет 4.

Если value является функцией, он вернет возвращаемое значение этой функции.Если value является вложенной функцией, она вернет значение глубоко вложенной функции.Например:

var fn = function() {
  return function() {
    return 4;
   };
};
assert.equal(value(fn), 4);

Я наивно решил проблему, используя следующее:

exports.value = (val) => {
  if (typeof val == 'function') {
    if (typeof val() == 'function') {
      if (typeof val()() =='function') {
        if (typeof val()()() =='function') {
          return false
        } else {
          return val()()();
        }
      } else {
        return val()();
      }
    } else {
      return val();
    }
  } else {
    return val;
  }
}

Этот код требует повторного использования. Есть ли способ использовать рекурсию для вызова n-го числа глубоко вложенных анонимных функций?

1 Ответ

0 голосов
/ 24 мая 2018
const value = v => typeof v === "function" ? value(v()) : v;

Просто вызовите value еще раз с результатом функции.

Чуть более читабельно:

function value(v) {
  if (typeof v === "function") {
    return value(v()); // !!!
  } else {
    return v;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...