我试图在闭包中编写递归。递归部分位于函数中。下面是模式:
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);
}我尝试过以许多方式声明函数,但是如果它被声明为箭头函数,它就永远不会起作用。我想知道为什么?
发布于 2018-06-02 08:09:03
问题是,在对象初始化器之外,这个:
doStuff: (x) => {
if (x<10) doStuff(x+1);
}...is a https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/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);
};发布于 2018-06-02 08:15:13
使用的方法并不是定义函数的正确方法。只需将:替换为=,并用任何真实值初始化--任何变量。
下面是您修改的代码。
var whatever = true
if (whatever) {
var doStuff = (x) => {
if (x<10)
return x + doStuff(x+1);
return x
}
console.log(doStuff(0)) // 55
}https://stackoverflow.com/questions/50654826
复制相似问题