Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не понимаю как работает for (два примера) (https://javascript.ru/forum/misc/57055-ne-ponimayu-kak-rabotaet-dva-primera.html)

jack3dm 17.07.2015 10:19

Не понимаю как работает for (два примера)
 
Вот собственно код. Всё вроде бы хорошо но если поменять места i-- и d++ то получится другой результат, блин я не понимаю как это работает, даже специально прописал document.write что бы пощагово следить за процессом, но так и не понимаю почему разные результаты когда мы просто поменяли местами i-- и d++

var d = 0; i = 10;
for(; d < 10 || i > 0; i-- && d++, 
	document.write("d is = ", d, " i is = ", i, "<br />")){
	
		if(d ==6 || i == 3)
			break;
};

/*
d is = 1 i is = 9
d is = 2 i is = 8
d is = 3 i is = 7
d is = 4 i is = 6
d is = 5 i is = 5
d is = 6 i is = 4
*/



var d = 0; i = 10;
for(; d < 10 || i > 0; d++ && i--, 
	document.write("d is = ", d, " i is = ", i, "<br />")){
	
		if(d ==6 || i == 3)
			break;
};

/*
d is = 1 i is = 10
d is = 2 i is = 9
d is = 3 i is = 8
d is = 4 i is = 7
d is = 5 i is = 6
d is = 6 i is = 5
*/

kostyanet 17.07.2015 10:24

i++ - переменная применяется, затем значение увеличивается
++i - значение увеличивается, затем переменная применяется

например

i=1;

return i++ // 1

return ++i; // 2

jack3dm 17.07.2015 10:30

Теперь работает всё замечательно. Так как я это и задумывал. Спасибо!
++d && --i
вместо
d++ && i--

var d = 0; i = 10;
for(; d < 10 || i > 0; ++d && --i, 
	document.write("d is = ", d, " i is = ", i, "<br />")){
	
		if(d ==6 || i == 3)
			break;
};

/*
d is = 1 i is = 9
d is = 2 i is = 8
d is = 3 i is = 7
d is = 4 i is = 6
d is = 5 i is = 5
d is = 6 i is = 4
*/

ksa 17.07.2015 10:47

Цитата:

Сообщение от jack3dm
Не понимаю как работает for

Ты не for не понимаешь... :) А не понимаешь как работает логическая операция &&

Возьмем букварь...
Цитата:

Логическое И (&&)
expr1 && expr2

Возвращает expr1, если оно может быть преобразовано к false; в ином случае возвращает expr2. Так что, при вызове с булевыми значениями, && вернет true только если оба операнда истинны, иначе false.
http://javascript.ru/boolean-operators

Urfin 17.07.2015 18:38

LHE — левое выражение
RHE — правое выражение

LHE && RHE
1. Всегда выполняет LHE
2. если LHE — true, выполняет RHE

LHE || RHE
1. Всегда выполняет LHE
2. Если LHE — false, выполняет RHE

LHE, RHE
1. Всегда выполняет LHE
2. Всегда выполняет RHE

Вам следует выбрать запятую, если оба выражения должны быть выполнены.


Часовой пояс GMT +3, время: 21:11.