Javascript 对深嵌套高阶函数应用递归
我正在解决Kolodny的Javascript练习(),特别是“值”练习 这个问题需要我创建一个函数,Javascript 对深嵌套高阶函数应用递归,javascript,algorithm,functional-programming,Javascript,Algorithm,Functional Programming,我正在解决Kolodny的Javascript练习(),特别是“值”练习 这个问题需要我创建一个函数,fn其中fn(值)将返回一个答案。如果value是标量(即4),它将返回4 如果value是一个函数,它将返回该函数的返回值。如果值是嵌套函数,它将返回深嵌套函数的值。例如: var fn = function() { return function() { return 4; }; }; assert.equal(value(fn), 4); 我天真地用以下方法解决了这个问
fn
其中fn(值)
将返回一个答案。如果value
是标量(即4),它将返回4
如果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个深度嵌套的匿名函数?
const value = v => typeof v === "function" ? value(v()) : v;
只需使用函数的结果再次调用value
更具可读性:
function value(v) {
if (typeof v === "function") {
return value(v()); // !!!
} else {
return v;
}
}
在测试它时,我得到一个错误“value未定义”。我假设是因为value导出了一个匿名函数?像这样
exports.value=(v)=>{…}
@agomez是的,然后做const-value=exports.value=v=>…
,效果很好。我以前没想过要出口这样的价值,谢谢。这意味着“value”被设置为一个exports对象,它返回一个匿名函数,对吗?如果是这样,调用它的符号不是value.exports()?只是wondering@agomez不,它将是exports.value()
否则:)