Давайте рассмотрим этот тестовый прогон.
Инициально, iterator(niceTripleCombo(coolWords))
вызывается с console.log()
.
Теперь niceTripleCombo(coolWords)
будет вызываться.
Начало niceTripleCombo (coolWords)
Теперь в цикле,
i = 0, предположим, что мы получаем newList = [" Milan"]
i = 1, предположим, что мы получаем newList = [" Milan", " London"]
i = 2, предположим, что мы получаем newList = [" Milan", " London", " London"]
Конец niceTripleCombo (coolWords)
В конце мы имеем Милан, Лондон, Лондон
Сейчас в iterator()
,
Так как у нас 2 Лондона, if
не удастся и else
будет запущен.
Теперь вот 1-я ошибка , вы не инициализировали newList
для очистки. Поэтому, когда niceTripleCombo
будет запущен снова, он добавит еще три города.
И вы можете получить, например, [" Milan", " London", " London", " Amsterdam", " Malaga", " Sofia"]
Теперь во вторых , return niceTripleCombo(coolWords);
не вернет никакого значения.
Почему он ничего не возвращает, потому что вы возвращаете функцию [niceTripleCombo(coolWords)
], у которой нет оператора возврата.
Либо ваша функция должна возвращать любое значение , либо при возврате
функция, эта функция должна возвращать значение. В твоем случае,
у вас нет оператора возврата в niceTripleCombo(coolWords)
и по умолчанию функция js возвращает undefined
, если нет другого значения
вернулся.
Вот почему вы получаете undefined
.
Итак, измените ваш else
в вашем iterator
следующим образом:
else {
newList = [];
niceTripleCombo(coolWords);
return iterator();
}
Теперь вы не должны получать undefined
. Далее нет необходимости передавать niceTripleCombo
в iterator
. Поскольку вы не используете функцию niceTripleCombo
внутри вас iterator
.
Подробнее о return
в MDN: заявление о возврате