Меню
✘Скрыть меню
Меню заработка
✘Скрыть меню
Загрузка.. nostroma.online from NOSTROMA - best life and beautiful workЭто ужасно тяжелая работа — ничего не делать – Оскар УайльдРешающую роль в работе играет не всегда материал, но всегда мастер – Максим ГорькийЯ слишком энергичен, чтобы работать – Марсель АшарЧто привлекло меня в карьере писателя? Отсутствие бумажной работы.Одни люди работают только для того чтобы работать, другие – для того, чтобы иметь возможность не работать в будущем.Занятие ерундой на рабочем месте развивает боковое зрение, слух и бдительность в целомСтоит статýя в лучах заката с огромным буем, в руках - граната.Друзья, если вы попались на лохотрон, не будьте эгоистами - предупредите других о таком сайте!Секрет гения — это работа, настойчивость и здравый смысл. Томас Эдисон
Меню заработка

Курсы JavaScript

Урок 5. Циклы for и while.


Циклы for и while

Повторение какого-либо кода в JavaScript реализуется циклами со счётчиком и без счётчиков в явном виде и с помощью некоторых функций - в неявном.

Цикл for

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

for ([initial-expression]; [condition]; [final-expression]){statement}, где

initial-expression -
объявление переменной для инициализации счётчика, например var i = 0; Эта переменная будет видна во всей области видимости.
condition -
выражение вычисляемое между итерациями - проходами цикла - проходы (итерации) цикла будут выполняться до тех пор, пока это выражение остаётся верным;
final-expression -
это выражение, вычисляемое в конце каждой итерации перед проверкой условия condition, обычно используется для увеличения переменной-счётчика;
statement -
блок, который будет выполняться при каждой итерации до тех пор, пока верно условие condition

Рассмотрим простой пример, где некоторая переменная будет увеличиваться до тех пор, пока не станет равной 15 и каждая итерация (проход цикла) будет выводиться в консоль:

	for (var i = 0; i <= 15; i++){
		console.log(i);
	}
	

В этом примере (<=) - меньше или равно, (>=) - больше или равно. Если в условии цикла for указать два знака "точка с запятой", то получится бесконечный цикл:

	for (;;){
		...
		if (условие){break;}
	}
	
	/* Этот цикл будет выполняться до тех пор, пока не появится условие,
	прописанное в if */
	

Цикл while

while задаёт цикл, который будет выполняться до тех пор, пока указанное условие верно. Синтаксис цикла while выглядит так:

while (condition){statement}, где

condition -
условие цикла.
statement -
блок, который будет выполняться при каждой итерации до тех пор, пока верно условие condition.

Простой пример: в следующем коде цикл будет увеличивать значение n при каждой итерации (проходе) на 2 до тех пор, пока верно условие n < 20 и пусть в конце каждой итерации значение n будет выведено в консоль:

	var n = 0;
	
	while( n < 20 ){
		n += 2;
		console.log(n);
	}
	

Запись n += 2; - это сокращение записи n = n + 2. В общем виде она выглядит так: x += y сокращение записи x = x + y.

Цикл с постусловием do...while отличается от цикла с предусловием while только тем, что выполняется хотя бы раз независимо от условия:

	var n = 0;
	
	while (n == 2){
		console.log ('итерация 1');
		n += 1;
	}
	
	// Не выведет ничего
	
	var x = 0;
	
	do{
		console.log ('итерация 1');
		x += 1;
		
	}while (x == 2)
	
	// Выведет 'итерация 1'
	

Бесконечный цикл while будет реализован, если указать в условии единицу: while(1).

Примеры использования циклов

Цикл for можно использовать для перебора свойств объекта:

	for (var i in o){
		console.log (i + " : " + o[i]);
	}
	

Для примера создадим объект "o" с несколькими свойствами и переберём их с помощью цикла for:

	//создаём объект "o"
	
	var o = {
		  width: 300,
		  height: 200,
		  title: "Menu"
	}
	
	//перебираем свойства объекта "o"
	
	for (var i in o){
		console.log (i + " : " + o[i]);
	}

Результат отображения в консоли браузера:

С помощью фигурных скобок в JS происходит инициализация литерала объекта. Каждое свойство объекта "o" - это его ключ. В JavaScript ключи указываются в квадратных скобках []. Запись o[i] - это ключ объекта "o".

Запись console.log(i + " : " + o[i]) можно прочитать так: взять ключ объекта прикрепить (+) к нему строку ":" прикрепить (+) значение этого ключа и вывести всё это в консоль браузера.

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

	for (var sum=0, i=0, j=10; i<10; ++i, --j){
		sum += i*j;
	}
	
	// 165
	

В этом примере при каждой итерации счётчик i увеличивается на единицу, а счётчик j - уменьшается на единицу, а в теле цикла суммируется их произведение. Строкой этот цикл можно записать так: 0*10 + 1*9 + 2*8 + 3*7 + 4*6 + 5*5 + 6*4 + 7*3 + 8*2 + 9*1 = 165.

Вычислим прогрессию - сумму чисел от 1 до 100 с помощью цикла for. Для начала посмотрим на блок-схему такого кода:



Теперь напишем код этой прогрессии:

	// Полный вариант кода с использованием while
	
	var s = 0;
	var i = 0;
	
	while (i < 100){
		i = i + 1;
		s = s + i;
	}
	
	// Сокращённый вариант кода с использованием while
	
	var s = 0, i = 0;
	
	while (i < 100){
		s += ++i;
	}
	
	// Сокращённый вариант кода с использованием for
	
	for(var s = 0, i = 0; i < 100; s += ++i);
	console.log(s);
	
	// Сокращённый вариант кода с использованием функции
	
	var s = function(N){
		N = N || 10;
		return N <= 1 ? 1:N + s(--N);
	}
	s(100);
	

Ответ будет 5050. В примере с функцией получается рекурсивная функция, которая вызывает сама себя, каждый раз уменьшая значение s на один до тех пор, пока значение N не будет равно единице - этому соответствует запись
N <= 1 ? 1:N + s(--N);

Комментарии

Введите Ваше имя:*

Введите e-mail:

Ваш комментарий:*

* Обязательные поля