f()()('x') // foox
f()()()()('x') //foooox
我试图返回嵌套函数,但无法获得所需的结果。
答案 0 :(得分:4)
您可以创建一个函数,该函数将根据传递的参数返回函数或结果,前提是仅最后一次调用传递了参数。
function f() {
let os = ''
return function again(x) {
os += 'o'
if (!x) return again;
else return `f${os}${x}`;
}
}
console.log(f()()('x'))
console.log(f()()()()('x'))
console.log(f()()()()()()('Y'))
答案 1 :(得分:3)
仅使用计数器变量,如果未定义变量,则返回一个函数。
const f = (a, c = 0) => a ? "f" + "o".repeat(c) + a : b => f(b, ++c);
console.log(f()()("x"));
console.log(f()()()()("z"));
ES5语法:
function f(a, c) {
c = c || 0;
if (a) {
return "f" + "o".repeat(c) + a;
} else {
return function(b) {
return f(b, c + 1);
}
}
}
console.log(f()()("x"));
console.log(f()()()()("z"));
答案 2 :(得分:1)
您可以为一个函数多次调用返回一个函数,并实现一个toString
方法以获取最终的字符串。
function f(v = 'o') {
var s = 'f' + v;
function g(v = 'o') {
s += v;
return g;
};
g.toString = function () { return s; };
return g;
}
console.log(f()()); // foo
console.log(f('it')); // fit
console.log(f()('x')); // fox
console.log(f()()('b')('a')('r')); // foobar