Я решаю упражнения Колодного по 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-го числа глубоко вложенных анонимных функций?