为什么我的JavaScript函数赢了';结束?

为什么我的JavaScript函数赢了';结束?,javascript,ecmascript-6,Javascript,Ecmascript 6,因此,我有以下代码,从中我希望x函数在被调用3次后返回null,但它一直返回相同的函数: 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 tail

因此,我有以下代码,从中我希望
x
函数在被调用
3次后返回
null
,但它一直返回相同的函数:

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 }
const repeat=(n,tailFn)=>{
for(设i=0;itailFn;
}
返回tailFn;
};
常数x=重复(2,x=>null);
console.log(x());//函数tailFn(){return\u tailFn}
console.log(x()());//函数tailFn(){return\u tailFn}
console.log(x());//函数tailFn(){return\u tailFn}

我做错了什么?查看它。

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

const repeat=(n,tailFn)=>{
返回n!==0?()=>重复(n-1,tailFn):tailFn;
};
常数x=重复(2,x=>null);
console.log(x());//()=>重复(n-1,tailFn)
console.log(x()());//x=>null

console.log(x());//null
您创建了一个始终返回自身的函数

tailFn=()=>tailFn;

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

我不是在创建一个新函数
tailFn
来返回旧的
tailFn
?我想我明白了。我只需要将
tailFn
保存在另一个变量中,并从新的
tailFn
返回该变量;