Как получить результат выполнения функции внутри нее самой, сделать преобразование и вернуть

Функция Add вызывается пользователем во внешней среде. Необходимо, чтобы вызванная функция Add выполнилась и полученное значение преобразовалось в число и вернулось в качестве ответа вызванной функции Add во внешнюю среду.

function Ext() {
  let cs = 0;

  function pars(fn) {
    let newFn = fn.bind(null);

    function cal(...num) {
      newFn = newFn.bind(null, ...num);
      return cal;
    }

    cal.toString = () => newFn();

    return (...num) => {
      newFn = fn.bind(null);
      return cal(...num);
    };
  }

  const _add = pars((...num) => {
    num.forEach((item) => { cs += item; });
    return num.reduce((a, b) => a + b);
  });

  return {
    add: function add(...num) {
      if ([...num].length === 0) return add;
      return _add(...num);
    }
    /*
    add: function(...num) {
       function add(...num) {
        if ([...num].length === 0) return add;
        var promise = new Promise(function(resolve, reject) {
          let result = _add(...num);
          resolve(result);
        });
        return promise;
      }
      
      add(...num).then(function(result) { Number(result) });
    },
    */
  }
}

const ext = Ext();

console.log(ext.add()); //function
console.log(ext.add(1)); //1
console.log(ext.add(3, 1)()(3)); //7

console.log(typeof ext.add(1)); //function
let one = ext.add(1);
console.log(one === 1); //false
console.log(Number(one) === 1); //true
console.log(typeof one) //function
console.log(typeof 1) //number


Ответы (0 шт):