Как я могу создать цикл в JavaScript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Цикл в JavaScript выглядит так:
for (var = startvalue; var <= endvalue; var = var + increment) {
// code to be executed
}
Вот пример цикла for:
У нас есть массив элементов узлы.
for(var i = 0; i< nodes.length; i++){
var node = nodes[i];
alert(node);
}
Для петель
for (i = startValue; i <= endValue; i++) {
// Before the loop: i is set to startValue
// After each iteration of the loop: i++ is executed
// The loop continues as long as i <= endValue is true
}
Ибо ... в петлях
for (i in things) {
// If things is an array, i will usually contain the array keys *not advised*
// If things is an object, i will contain the member names
// Either way, access values using: things[i]
}
Использование циклов for...in для обхода массивов - плохая практика. Это противоречит стандарту ECMA 262 и может вызвать проблемы при добавлении нестандартных атрибутов или методов к объекту Array, например. пользователя Прототип.
(Спасибо Чейз Зайберт за указание на это в комментариях)
Пока петли
while (myCondition) {
// The loop will continue until myCondition is false
}
Проблем с циклами for-in можно избежать, если вы проверите с hasOwnProperty: if (! Things.hasOwnProperty (i)) {continue; }
Вы также можете подумать об оптимизации скорости цикла; см. http://www.robertnyman.com/2008/04/11/javascript-loop-performance/
Помимо встроенных циклов (while() ..., do ... while(), for() ...), существует структура функции самовызова, также известная как рекурсия, для создания цикла без трех встроенных структур цикла.
Учтите следующее:
// set the initial value
var loopCounter = 3;
// the body of the loop
function loop() {
// this is only to show something, done in the loop
document.write(loopCounter + '<br>');
// decrease the loopCounter, to prevent running forever
loopCounter--;
// test loopCounter and if truthy call loop() again
loopCounter && loop();
}
// invoke the loop
loop();Излишне говорить, что эта структура часто используется в сочетании с возвращаемым значением, так что это небольшой пример того, как работать со значением, которое доступно не в первый раз, а в конце рекурсии:
function f(n) {
// return values for 3 to 1
// n -n ~-n !~-n +!~-n return
// conv int neg bitnot not number
// 3 -3 2 false 0 3 * f(2)
// 2 -2 1 false 0 2 * f(1)
// 1 -1 0 true 1 1
// so it takes a positive integer and do some conversion like changed sign, apply
// bitwise not, do logical not and cast it to number. if this value is then
// truthy, then return the value. if not, then return the product of the given
// value and the return value of the call with the decreased number
return +!~-n || n * f(n - 1);
}
document.write(f(7));
Вы не должны использовать for ... in для циклического перебора массивов. Это вызовет проблемы с Prototype. См. prototypejs.org/api/array