Как получить результат выполнения функции внутри нее самой, сделать преобразование и вернуть
Функция 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