Node.js: функция "не определена", если объявлена ​​жирной стрелкой - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь написать рекурсию в закрытии.Рекурсивная часть находится в функции.Вот схема:

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 голосов
/ 02 июня 2018

Используемый способ не является правильным способом определения функции.Просто замените : на = и инициализируйте любой переменной любым истинным значением.

Ниже приведен ваш измененный код.

 var whatever = true

 if (whatever) {
    var doStuff = (x) => {
         if (x<10) 
             return x + doStuff(x+1);
         return x
    }
    console.log(doStuff(0)) // 55
 }
0 голосов
/ 02 июня 2018

Проблема в том, что вне инициализатора объекта это:

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

... является меткой (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);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...