我试图在闭包中写一个递归。递归部分是一个函数。这是架构:
if (whatever) {
doStuff: (x) => {
if (x<10) doStuff(x+1);
}
doStuff(0);
}
它不起作用:doStuff is not defined.
但这有效:
if (whatever) {
function doStuff(x) {
if (x<10) doStuff(x+1);
}
doStuff(0);
}
我尝试以多种方式声明该功能,但如果它被声明为箭头功能,它就无法工作。我想知道为什么?
答案 0 :(得分:4)
问题是在对象初始化器之外,这个:
doStuff: (x) => {
if (x<10) doStuff(x+1);
}
...是一个label(doStuff:
)后跟一个箭头函数表达式,创建一个你永远不会保存或调用的函数,你就把它丢弃了。它与箭头函数无关,如果使用传统函数表达式,则会遇到同样的问题:
doStuff: function(x) { // Same problem, but with traditional function expression
if (x<10) doStuff(x+1);
}
相反,如果您希望它是箭头函数,请将其指定给变量或常量:
const doStuff = (x) => {
if (x<10) doStuff(x+1);
};
答案 1 :(得分:-1)
使用的方式不是定义函数的正确方法。只需将:
替换为=
,然后将任何变量初始化为任何真值。
以下是您修改后的代码。
var whatever = true
if (whatever) {
var doStuff = (x) => {
if (x<10)
return x + doStuff(x+1);
return x
}
console.log(doStuff(0)) // 55
}