JavaScript для циклической записи в массив неопределен - PullRequest
0 голосов
/ 28 мая 2018

Привет, я делаю первую часть красноречивого javascript chp4 «Сумма диапазона».Потратив некоторое время, я был уверен, что взломал первую часть.

"Напишите функцию диапазона, которая принимает два аргумента, начало и конец, и возвращает массив, содержащий все числа от начала до (и включая) конца. "

Я смотрел на ответы людей, но все они включают дальнейшие части вопроса.Я хочу, чтобы все было просто, в конце концов, если я не могу сделать первую часть, то надежды нет.это кажется легким.

function range(start, end) {
  let array = [];

  for (let i = start; i <= end; i++){array.push(i);}
}

console.log(range(20 , 25));

но я не определен, я пытался даже копировать и сокращать ответы книг в похожей ситуации.

Такое чувство, что мой мозг просто не может сделать код.Куда я иду не так?Почему это не определено?

ниже дан ответ

function range(start, end, step = start < end ? 1 : -1) {
  let array = [];

  if (step > 0) {
    for (let i = start; i <= end; i += step) array.push(i);
  } else {
    for (let i = start; i >= end; i += step) array.push(i);
  }
  return array;
}

function sum(array) {
  let total = 0;
  for (let value of array) {
    total += value;
  }
  return total;
}

console.log(range(1, 10))
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1));
// → [5, 4, 3, 2]
console.log(sum(range(1, 10)));
// → 55

спасибо, ребята

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Переменная array объявлена ​​с let, что дает ей область видимости блока.Он объявляется внутри функции range

function range(start, end) {
  let array = [];

  for (let i = start; i <= end; i++){array.push(i);}
}

, и его продолжительность истекает после завершения функции.После этого он больше не существует.

Как уже говорили другие, return array.

Таким образом, сохраняется ссылка на строку, где она вызывается.И если там назначена другая ссылка, длительность массива будет продлена до отсутствия ссылок.Затем он отправляется на сборку мусора.

Пример:

let arr = range(5,10);
0 голосов
/ 28 мая 2018

Вы ничего не возвращаете с range.Используйте return array; в range функции:

function range(start, end) {
  let array = [];

  for (let i = start; i <= end; i++){array.push(i);}
  return array;
}

console.log(range(20 , 25));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...