Node.js:function"未定义"如果宣布为胖箭头

时间:2018-06-02 08:05:31

标签: javascript node.js ecmascript-6

我试图在闭包中写一个递归。递归部分是一个函数。这是架构:

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);
}

我尝试以多种方式声明该功能,但如果它被声明为箭头功能,它就无法工作。我想知道为什么?

2 个答案:

答案 0 :(得分:4)

问题是在对象初始化器之外,这个:

doStuff: (x) => {
   if (x<10) doStuff(x+1);
}

...是一个labeldoStuff:)后跟一个箭头函数表达式,创建一个你永远不会保存或调用的函数,你就把它丢弃了。它与箭头函数无关,如果使用传统函数表达式,则会遇到同样的问题:

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
 }