для циклов, console.log, return, undefined и scope - PullRequest
0 голосов
/ 14 февраля 2019

Извиняюсь за этот вопрос для начинающих, но я публикую это здесь как последнее средство, пытаясь понять, как это на самом деле работает.У меня проблема в том, что я должен выполнить некоторые упражнения, используя repl.it, где печать на консоль с использованием console.log возвращает undefined.Например, если я запускаю этот код внутри него:

function countdown(num) {
  for (let i = num; i > 0; i--) {
    console.log(i)
  }
};
countdown(10);

он печатает:

10
9
8
7
6
5
4
3
2
1
=> undefined

Теперь, когда я запускаю этот код в VS Code, он производит то же самое, но без неопределенного в нижней части,Поскольку я должен использовать repl.it и не хочу печатать undefined, я должен использовать return right?В любом случае возврат лучше использовать в этом случае.Поэтому я изменяю свой код, но, конечно, использование return внутри блока кода цикла for останавливает выполнение цикла, что не годится.Итак, я делаю это:

function countdown(num){
    let count = 0;
    for (let i = num; i > 0; i--){
        count = i;
    }
    return count;
};
console.log(countdown(10));

Но тогда я просто вернул 1.Итак, мой вопрос, как я могу вернуть повторный отсчет без использования console.log () и каких-либо методов и с помощью ключевого слова return?Это чисто для моего понимания, а не для какой-то конкретной части функциональности.Большое спасибо и заранее извините за мою путаницу.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Возвращает массив.

function countdown(num) {
  let count = [];
  for (let i = num; i > 0; i--) {
    count.push(i);
  }
  return count;
};
console.log(countdown(10));

Я использовал console.log() выше, потому что фрагменты стека не распечатывают автоматически значения вызовов функций.Когда вы попробуете это в repl.it, просто напишите:

countdown(10)

, и он автоматически напечатает возвращенный массив.

0 голосов
/ 14 февраля 2019

как я могу вернуть повторный отсчет без использования console.log () и каких-либо методов и с помощью ключевого слова return

Вы можете получить повторный возврат с помощью генератора, но вынеобходимо yield значение на каждой итерации вместо использования return в конце:

function* countdown(num) {
  for (let i = num; i > 0; i--) {
    yield i;
  }
};
console.log(...countdown(10));

Или вы можете создать массив и вернуть его:

function countdown(num) {
  const arr = [];
  for (let i = num; i > 0; i--) {
    arr.push(i);
  }
  return arr;
};
console.log(countdown(10));
...