所以我有以下代码,我希望x
函数在调用null
次之后返回3
,但它会一直返回相同的函数:
const repeat = (n, tailFn) => {
for (let i = 0; i < n; i++) {
tailFn = () => tailFn;
}
return tailFn;
};
const x = repeat(2, x => null);
console.log(x()); // function tailFn() { return _tailFn }
console.log(x()()); // function tailFn() { return _tailFn }
console.log(x()()()()()()); // function tailFn() { return _tailFn }
我做错了什么?请在CodePen上查看。
答案 0 :(得分:7)
您的函数只需将() => tailFn
分配给tailFn
三次,然后将其返回。相反,如果repeat(n - 1, tailFn)
不是n
,则应返回返回0
的函数,否则返回tailFn
。
const repeat = (n, tailFn) => {
return n !== 0 ? () => repeat(n - 1, tailFn) : tailFn;
};
const x = repeat(2, x => null);
console.log(x()); // () => repeat(n - 1, tailFn)
console.log(x()()); // x => null
console.log(x()()()); // null
&#13;
答案 1 :(得分:5)
您已创建了一个始终自行返回的功能
tailFn=()=>tailFn;
实际上循环是没有意义的。它的行为类似于没有基本情况的递归函数。