为什么我的JavaScript功能不会结束?

时间:2016-12-22 16:43:55

标签: 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 }

我做错了什么?请在CodePen上查看。

2 个答案:

答案 0 :(得分:7)

您的函数只需将() => tailFn分配给tailFn三次,然后将其返回。相反,如果repeat(n - 1, tailFn)不是n,则应返回返回0的函数,否则返回tailFn

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:5)

您已创建了一个始终自行返回的功能

tailFn=()=>tailFn;

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