为什么我的JavaScript函数不会结束?

nor*_*tpy 1 javascript ecmascript-6

所以我有以下代码,我希望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 }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?在CodePen上看到它.

Mic*_*ski 7

你的函数只分配() => tailFntailFn三次然后返回它.相反,你应该返回一个函数,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
Run Code Online (Sandbox Code Playgroud)


Pab*_*ano 5

您已经创建了一个始终返回的函数,

tailFn=()=>tailFn;
Run Code Online (Sandbox Code Playgroud)

实际上,循环是没有意义的.它的行为类似于没有基本情况的递归函数.