Меню

Javascript не работают циклы

Циклы while и for

При написании скриптов зачастую встаёт задача сделать однотипное действие много раз.

Например, вывести товары из списка один за другим. Или просто перебрать все числа от 1 до 10 и для каждого выполнить одинаковый код.

Для многократного повторения одного участка кода предусмотрены циклы.

Цикл «while»

Цикл while имеет следующий синтаксис:

Код из тела цикла выполняется, пока условие condition истинно.

Например, цикл ниже выводит i , пока i :

Одно выполнение тела цикла по-научному называется итерация. Цикл в примере выше совершает три итерации.

Если бы строка i++ отсутствовала в примере выше, то цикл бы повторялся (в теории) вечно. На практике, конечно, браузер не позволит такому случиться, он предоставит пользователю возможность остановить «подвисший» скрипт, а JavaScript на стороне сервера придётся «убить» процесс.

Любое выражение или переменная может быть условием цикла, а не только сравнение: условие while вычисляется и преобразуется в логическое значение.

Например, while (i) – более краткий вариант while (i != 0) :

Если тело цикла состоит лишь из одной инструкции, мы можем опустить фигурные скобки <…>:

Цикл «do…while»

Проверку условия можно разместить под телом цикла, используя специальный синтаксис do..while :

Цикл сначала выполнит тело, а затем проверит условие condition , и пока его значение равно true , он будет выполняться снова и снова.

Такая форма синтаксиса оправдана, если вы хотите, чтобы тело цикла выполнилось хотя бы один раз, даже если условие окажется ложным. На практике чаще используется форма с предусловием: while(…) <…>.

Цикл «for»

Более сложный, но при этом самый распространённый цикл — цикл for .

Выглядит он так:

Давайте разберёмся, что означает каждая часть, на примере. Цикл ниже выполняет alert(i) для i от 0 до (но не включая) 3 :

Рассмотрим конструкцию for подробней:

часть
начало i = 0 Выполняется один раз при входе в цикл
условие i Проверяется перед каждой итерацией цикла. Если оно вычислится в false , цикл остановится.
шаг i++ Выполняется после тела цикла на каждой итерации перед проверкой условия.
тело alert(i) Выполняется снова и снова, пока условие вычисляется в true .

В целом, алгоритм работы цикла выглядит следующим образом:

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

Если тема циклов для вас нова, может быть полезным вернуться к примеру выше и воспроизвести его работу на листе бумаги, шаг за шагом.

Вот в точности то, что происходит в нашем случае:

В примере переменная счётчика i была объявлена прямо в цикле. Это так называемое «встроенное» объявление переменной. Такие переменные существуют только внутри цикла.

Вместо объявления новой переменной мы можем использовать уже существующую:

Пропуск частей «for»

Любая часть for может быть пропущена.

Для примера, мы можем пропустить начало если нам ничего не нужно делать перед стартом цикла.

Можно убрать и шаг :

Это сделает цикл аналогичным while (i .

А можно и вообще убрать всё, получив бесконечный цикл:

При этом сами точки с запятой ; обязательно должны присутствовать, иначе будет ошибка синтаксиса.

Прерывание цикла: «break»

Обычно цикл завершается при вычислении условия в false .

Но мы можем выйти из цикла в любой момент с помощью специальной директивы break .

Например, следующий код подсчитывает сумму вводимых чисел до тех пор, пока посетитель их вводит, а затем – выдаёт:

Директива break в строке (*) полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на alert .

Вообще, сочетание «бесконечный цикл + break » – отличная штука для тех ситуаций, когда условие, по которому нужно прерваться, находится не в начале или конце цикла, а посередине.

Переход к следующей итерации: continue

Директива continue – «облегчённая версия» break . При её выполнении цикл не прерывается, а переходит к следующей итерации (если условие все ещё равно true ).

Её используют, если понятно, что на текущем повторе цикла делать больше нечего.

Например, цикл ниже использует continue , чтобы выводить только нечётные значения:

Для чётных значений i , директива continue прекращает выполнение тела цикла и передаёт управление на следующую итерацию for (со следующим числом). Таким образом alert вызывается только для нечётных значений.

Цикл, который обрабатывает только нечётные значения, мог бы выглядеть так:

С технической точки зрения он полностью идентичен. Действительно, вместо continue можно просто завернуть действия в блок if .

Однако мы получили дополнительный уровень вложенности фигурных скобок. Если код внутри if более длинный, то это ухудшает читаемость, в отличие от варианта с continue .

Обратите внимание, что эти синтаксические конструкции не являются выражениями и не могут быть использованы с тернарным оператором ? . В частности, использование таких директив, как break/continue , вызовет ошибку.

Например, если мы возьмём этот код:

…и перепишем его, используя вопросительный знак:

…то будет синтаксическая ошибка.

Это ещё один повод не использовать оператор вопросительного знака ? вместо if .

Метки для break/continue

Бывает, нужно выйти одновременно из нескольких уровней цикла сразу.

Например, в коде ниже мы проходимся циклами по i и j , запрашивая с помощью prompt координаты (i, j) с (0,0) до (2,2) :

Нам нужен способ остановить выполнение если пользователь отменит ввод.

Обычный break после input лишь прервёт внутренний цикл, но этого недостаточно. Достичь желаемого поведения можно с помощью меток.

Метка имеет вид идентификатора с двоеточием перед циклом:

Вызов break в цикле ниже ищет ближайший внешний цикл с такой меткой и переходит в его конец.

В примере выше это означает, что вызовом break outer будет разорван внешний цикл до метки с именем outer , и управление перейдёт со строки, помеченной (*) , к alert(‘Готово!’) .

Можно размещать метку на отдельной строке:

Директива continue также может быть использована с меткой. В этом случае управление перейдёт на следующую итерацию цикла с меткой.

Метки не дают возможности передавать управление в произвольное место кода.

Например, нет возможности сделать следующее:

Вызов break/continue возможен только внутри цикла, и метка должна находиться где-то выше этой директивы.

Итого

Мы рассмотрели 3 вида циклов:

  • while – Проверяет условие перед каждой итерацией.
  • do..while – Проверяет условие после каждой итерации.
  • for (;;) – Проверяет условие перед каждой итерацией, есть возможность задать дополнительные настройки.

Чтобы организовать бесконечный цикл, используют конструкцию while (true) . При этом он, как и любой другой цикл, может быть прерван директивой break .

Если на данной итерации цикла делать больше ничего не надо, но полностью прекращать цикл не следует – используют директиву continue .

Обе этих директивы поддерживают метки, которые ставятся перед циклом. Метки – единственный способ для break/continue выйти за пределы текущего цикла, повлиять на выполнение внешнего.

Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JavaScript нет такой возможности.

Источник

Не работает цикл for

Цикл: как работает цикл в цикле
Не могу понять как работает цикл в цикле например: repeat begin lalalala if что-то1<>100 then.

На Главной странице не работает правильно вывод (неккоректно работает цикл)
Я создал тему с нуля. И мне нужно было чтоб на главной странице(Главная).

Цикл работает неправильно, в то время как POST работает
Всем привет! Я хотел написать под php скрипт с авторизацией, брут, на своем сайте(подбор пароля).

Создать программу по всем 3 видам циклов. цикл с параметром,цикл с условием,цикл,и цикл с предусловием.
Найти сумму чисел 1 в квадрате до 10 c квадрате. операцию возведению в степень не использовать.

да con=console я забыл сказать

Добавлено через 54 секунды
но всёравно только что поставил console, не работает

Добавлено через 53 минуты
ребяяят я уже не знаю какой параметр менять никак не работает

сразу выходит из функции. Дальше уже ничего не будет выполняться в функции

Добавлено через 1 минуту
BANO,

Как говорил один мой знакомый кодер

Добавлено через 3 минуты
BANO,
вы в условие делаете присвоение if (element.direction=0), а вам нужно сравнение if (element.direction==0)

вам уже говорили

whiteapps, согласен всё время забываю про ==
а вот про con я уже говорил у меня это также как doc=document
а в общем спасибо

Добавлено через 23 минуты
не работает вот код должно работать а он даже в консоль не черта не выводит

Решение

BANO, не style.position.top , а style.top и остальные аналогично — раз.

Позиция задаётся не числом а строкой, с px на конце — 2.
Условие должно быть не ‘ Добавлено через 1 час 10 минут
UPD: поправил лишнюю скобочку в скрипте

Не работает цикл for
Всем привет! Необходимо было написать реализацию RSA, однако возникли проблемы с циклом for: for.

Не работает цикл
Здравствуйте,недавно начал изучать С, но знаю паскаль и питон. Пишу сюда первый раз. Столкнулся с.

Не работает цикл
Помогите решить вопрос. Использую цикл do while для вывода из базы информации которая вставляется в.

Не работает цикл
Почему не работает цикл do while? Например при x_nach=-0.5, x_konech=0.5, eps+0.1, delta_x=0.1 цикл.

Не работает цикл do — while
Пытаюсь сделать бесконечный цикл который будет прекращаться по нажатию клавиши Esc. Прочёл что do.

Не работает цикл.
var myStr =»»; var winCount = 0; function initWindow()< myStr += "

Источник

Форум

Справочник

Опции темы Искать в теме

Такая конструкция цикла не работает

— php скрипт, где $arr[i][1] вывод из массива $arr

Как сделать так чтобы выводилось сours0, сours1, сours2 ? Вот так не выходит:

Сообщение от laimas for (let i = 0; i ), если его на клиенте нет?

Но так ведь все работает:

Сообщение от thislegion Но так ведь все работает

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

Этот код заставит РНР искать среди констант константу i (то что прописано выше, let i = 0, ничего не значит, это просто текст, который РНР выдает в браузер), и не найдя ее вернет NULL, и $arr[i][1] также вернет NULL, ибо такого элемента в массиве $arr нет.

вывод в браузер кода в теге

и что без проблем в нем будет выполнено.

PS. Если вы хотите массив определяемый сервером обойти в цикле на клиенте, нужно этот массив передать клиенту как JS массив, например так (до for (let i = 0; i ;, let сours[i]= arr[i]; (при этом сours должна быть объявлена как массив), зачем только это нужно не понимаю.

Сообщение от thislegion Как сделать так чтобы выводилось сours0, сours1, сours2 ? Вот так не выходит:

Как правило, использование языка X для генерации кода на языке Y является плохой практикой, обладающей большим количеством недостатков, чем реально практически полезных случаев.

Вам следует скачать нужные данные (ваш массив) с сервера или подключить данные к странице. Давайте рассмотрим пример с подключением данных.

Таким образом, PHP код занят только заполнением структуры данных, а JavaScript только использованием предоставленной структуры данных.

Такое разделение позволяет легко добавить асинхронную загрузку данных (xhr или fetch) в будущем. Скрипт статичен и может быть кэширован. Разделение проблем JS и PHP. Возможность использовать все блага экосистемы JS — среди которых минификация, транспиляция кода и пр.

Содержание данных PHP в объекте window[‘cfg’] подходит для большинства случаев использования, но лучше всего отделить его полностью. Вы можете использовать RESTful API для запроса только тех данных, которые вам нужны, это чуть больше JavaScript, но с ещё большими преимуществами.

Источник

Ошибки начинающих при работе с циклом while в JavaScript

Цикл while может выполняться бесконечно (это приведет к зависанию скрипта и страницы браузера), достаточно передать ему выражение, которое никогда не станет ложным. Например, так:

Начинающие программисты время от времени загоняют свою программу в бесконечный цикл (с вами это тоже обязательно случится пару раз). Давайте рассмотрим распространенные ошибки начинающих.

Ошибка 1

Пусть есть вот такой цикл, выводящий числа от 1 до 10 :

Представим теперь, что программист забыл сделать увеличение счетчика в цикле:

В этом случае цикл будет выполнятся бесконечно, так как условие, при котором цикл закончится, никогда не будет достигнуто.

Ошибка 2

Пусть опять наш программист хотел выводить числа от 1 до 10 , однако, вместо ++ написал — :

В этом случае, хотя счетчик и изменяется, но он изменяется не в ту сторону — и опять условие никогда не будет достигнуто.

Цикл не запускается

Бывает и обратная проблема — можно так написать код, что условие цикла уже изначально будет неверно и цикл просто не запустится.

Пусть, к примеру, программист хотел вывести столбец чисел от 1 до 10 , однако, вместо условия i , написал условие i >= :

В таком случае цикл просто не начнется, так как условие изначально неверно.

Бывает и так, что некоторым начинающим кажется, что цикл крутится не пока условие верно, а наоборот — цикл крутится пока условие не верно и остановится, когда оно станет верным.

Вот пример такого кода:

При таком условии цикл вообще не начнется, так как условие просто изначально не верно.

Задачи

В следующем коде программист вывел числа от 10 до 1 :

В коде, однако, была допущена ошибка, которая привела к тому, что цикл выполняется бесконечно. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1 :

В коде, однако, была допущена ошибка, которая привела к тому, что цикл выполняется бесконечно. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1 :

В коде, однако, была допущена ошибка, которая привела к тому, что на экран ничего не вывелось. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1 :

В коде, однако, была допущена ошибка, которая привела к тому, что на экран ничего не вывелось. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1 :

В коде, однако, была допущена ошибка, которая привела к тому, что цикл вывел только число 10 и закончил свою работу. Исправьте ошибку программиста.

Источник

Читайте также:  Оторвалась вилка от гирлянды как починить
Adblock
detector