Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Код внутри массива. (https://javascript.ru/forum/misc/18939-kod-vnutri-massiva.html)

Sundro 20.07.2011 20:19

Код внутри массива.
 
Вот код из книги фленагана.
<! Это анимируемый элемент div >
<div id="urgent"><h1>Внимание!</h1>Веб сервер атакован!</div>
<script>
var e = document.getElementById("urgent");
// Получаем объект Element
e.style.border = "solid black 5px";
// Рамка
e.style.padding = "50px";
// И отступ
var colors = ["white", "yellow", "orange", "red"] // Перебираемые цвета
var nextColor = 0;
// Текущая позиция перебора
// Вызывать следующую функцию с интервалом 500 миллисекунд
// для изменения цвета рамки.
setInterval(function() {
e.style.borderColor=colors[nextColor++%colors.length];
}, 500);
</script>

Все здесь вроде бы просто и понятно кроме одного момента colors[nextColor++%colors.length], объясните попдробнее пожалуйста, что здесь происходит, по идее должна добавляться переменная массива а здесь идет выполнение кода словно в цикле.

Sweet 20.07.2011 20:32

Увеличиваем nextColor на один, берем остаток от деления на длину массива. Получившееся число - индекс в массиве. Просто способ такой.

Sundro 20.07.2011 21:29

Это я понимаю. Я просто был удивлен что в массиве "nextColor++%colors.length" , теперь понял что это равносильно доступа к элементу по colors[i] где i= nextColor++%colors.length. Теперь осталось легкое удивление с радостью от того насколько гибок язык.

9xakep 20.07.2011 22:17

а я что-то не понял =( Просто если идти последовательно:длина массива-3,nextColor-0,получается:0++(1)далее берем остаток от деления 1/3 О_о и какой тоода получится индекс массива?

Aetae 20.07.2011 22:57

Ну во-первых 0++ - это ещё 0, а во вторых:
alert(1%3)

9xakep 20.07.2011 23:09

хм...а почему 0++ все равно 0?
А так спасибо,понял.

Aetae 20.07.2011 23:42

i=0;
alert(i++)
alert(i)

i=0;
alert(++i)
alert(i)

http://javascript.ru/arithmetic

monolithed 20.07.2011 23:56

Цитата:

Сообщение от 9xakep
хм...а почему 0++ все равно 0?

SyntaxError

Aetae 21.07.2011 00:00

Цитата:

Сообщение от monolithed (Сообщение 114545)
SyntaxError

=) ну всем же понятно что имеется ввиду)

9xakep 21.07.2011 09:35

всем =)... Но вот если бы вы так сразу бы написали,было бы еще понятнее)


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