Задать вопрос

Почему при написании цикла for of работает, а при другом цикле не работает?

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>Поиск минимального и максимального числа</h1>
    <p class="all-elements">12, 5, 8, 20, 3, 16</p>
    <button class="min">Найти минимальное число</button>
    <button class="max">Найти максимальное число</button>
    <p>Минимальное число: <span class="minNumber"></span></p>
    <p>Максимальное число: <span class="maxNumber"></span></p>
    <script>
      let minNumber = document.querySelector('.minNumber');
      let maxNumber = document.querySelector('.maxNumber');

      let numbers = [12, 5, 8, 20, 3, 16];

      let min = document.querySelector('.min');
      let max = document.querySelector('.max');

      min.onclick = function min() {
          let minimum = numbers[0]; 
		for (const item of numbers) { 
		if(item < minimum) { 
			minimum = item; 
		} 
		}
 	minNumber.append(minimum);
	return minimum;
}; 

 
	 
      max.onclick = function min() {
          let maximum = numbers[0]; 
		for (const item of numbers) { 
		if(item > maximum) { 
			maximum = item; 
		} 
		}
 	maxNumber.append(maximum);
	return maximum;
};

    </script>
  </body>
</html>

Почему, если я переписываю кнопку min вот таким вот образом, то она мне выдаёт значение 12, а не 3?

min.onclick = function min() {
          let minimum = numbers[0]; 
		for (const i = 0; i < numbers.length;; i++) { 
		if(numbers[i] < minimum) { 
			minimum = numbers[i]; 
		} 
		}
 	minNumber.append(minimum);
	return minimum;
};


ПРОБЛЕМУ РЕШИЛ: НАДО БЫЛО let НАЗЫВАТЬ, А НЕ Const
  • Вопрос задан
  • 399 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию
    6 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Для чего вообще цикл нужен чтобы определить минимальное и максимальное число?

Math.min(...[12, 5, 8, 20, 3, 16]); // 3
Math.max(...[12, 5, 8, 20, 3, 16]); // 20
Ответ написан
opium
@opium
Просто люблю качественно работать
в обычном for-е i++ — это переприсваивание, const его запрещает. Первая итерация проходит (12 < 12 = false), потом update-шаг кидает TypeError и функция падает — minimum так и остаётся 12.

for...of создаёт новый binding на каждой итерации, поэтому там const нормально работает.
Ответ написан
Комментировать
@ImagineTables
Во-первых, крайне неряшливый код. Зачем обработчик возвращает минимум? Зачем именовать обработчик, если имя ему заменяет min.onclick =, чтобы конфликт получить, как у вас и вышло в итоге? Зачем второй ; в цикле?

Во-вторых, циклы руками надо писать только тогда, когда нужно. Если есть сомнения, нужно или нет, значит не нужно. Пишите так:

min.onclick = function ()
{
     minNumber.append(numbers.reduce((p, v) => p < v ? p : v ));
};


Или, как выше посоветовали, Math.min для небольших массивов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы