@Evgenij_nechujveter

Почему на срабатывает цикл калькулятора?

do {
        function calculator() {


            function add(a, b) {
                return a + b;
            }

            function sub(a, b) {
                return a - b;
            }

            function mul(a, b) {
                return a * b;
            }

            function div(a, b) {
                return a / b;
            }

            var operand1 = prompt("Введите первое число: ");
            var sign = prompt("Введите знак арифметической операции: + - * /");
            var operand2 = prompt("Введите второе число: ");
            var result;

            operand1 = parseInt(operand1);
            operand2 = parseInt(operand2);

            switch (sign) {
                case "+":
                    result = add(operand1, operand2);
                    break;
                case "-":
                    result = sub(operand1, operand2);
                    break;
                case "*":
                    result = mul(operand1, operand2);
                    break;
                case "/":
                    result = div(operand1, operand2);
                    break;

                default:
                    document.write("<p><b style='color:red'>" + sign + "</b> - не является знаком арифметической операции.");
            }


            document.write("<p>" + operand1 + " " + sign + " " + operand2 + " = " + result);
        }
        setTimeout(calculator, 5000);
    } while (calculator);
  • Вопрос задан
  • 340 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Не загружается потому, что просто зависает. У вас же бесконечный цикл while (calculator) который никогда не станет false, и он будет жрать процессор беспрерывно. Кроме того, он нигде не получает пользовательский ввод. Т.е. не слушает какие кнопки нажаты и не читает никакой текст. Он просто очень быстро повторяется и забивает память новыми калькуляторами (из-за setTimeout в каждом цикле).

Лучший вариант - разобрать это всё на части (типа декомпозиция), потом почитать учебник и 60% кода выбросить.

Еще раз:
1. Не стоит объявлять функции add, sub, mul... в каждом цикле. Их можно вынести в начало.
2. setTimeout в каждом цикле не нужен. Используйте setInterval один раз.
3. document.write - тоже сомнительный выбор. выводите в консоль (console.log) или в какой-то блок, вместо тог чтоб пытаться писать в документ.
Ответ написан
Negwereth
@Negwereth
lvivcss.com.ua
Охохо, а что вы хотите в цикле делать-то? Вы просто космическими темпами тут память забиваете.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы