вернуть самый внутренний оператор возврата в js - PullRequest
0 голосов
/ 05 мая 2020

У меня есть функция, которая вызывает другую функцию и так далее, например,

var fn1 = function() { return 'bar'; };
var fn2 = function() {
  return fn1;
};
var fn3 = function() {
  return fn2;
};

, теперь это может продолжаться.

Поэтому я хотел бы рекурсивно вызвать метод, пока я не получу строку / значение, т.е. самый внутренний оператор возврата.

Я пробовал вот так:

function p (val){
var res = val;
while(typeof(res)=="function"){res = p()}
return res;
}

и называя это как p (fn2); но похоже, что это не работает. Что мне не хватает.

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Вам нужно переназначить res (или val) внутри l oop, а затем вернуть его (не возвращайте p) в конце:

var fn1 = function() {
  return 'bar';
};
var fn2 = function() {
  return fn1;
};
var fn3 = function() {
  return fn2;
};



function p(val) {
  while (typeof val === "function") {
    val = val();
  }
  return val;
}

console.log(p(fn3));
1 голос
/ 05 мая 2020

Вы можете попробовать это:

var fn1 = function() {
  return 'bar';
};
var fn2 = function() {
  return fn1;
};
var fn3 = function() {
  return fn2;
};    

function p(val) {
  if (typeof val === "function") {
    return p(val())
  }
  return val;
}

console.log(p(fn3));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...