js - нет логики почему цикл продолжает работать
есть совсем уж маленькей код:
function SwapOrder(str){
split=str.split("").reverse();
string='';
for(i=0;i<str.length;i+=2){
string+=split[i+1]+split[i];
}
return string;
}
история тянется еще из блокчейна btc, этот код переворачивает по своему строку, но вот не задача, решил я значит написать это на js, вроде все ок, но в итоге
for(i=0;i<11;i++)SwapOrder("1234567890");
в цикле этот код вовсе ведет себя странно, по факту я понял что цикл не останавливается (если i<12 ну или больше), просто бесконечно роботает и пожирает ресурсы cpu. помогите понять - это я такой тупой или это особенность языка.
Ответы (2 шт):
Попробуй заменить в цикле i:
for(x=0;x<11;x++)SwapOrder("1234567890");
Дело в области видимости итератора, SwapOrder помимо возврата строки оставляет не почищенным итератор i цикла что находится внутри функции(в случае приведённых вами данных i=10), после того как отрабатывает функция, во внешнем цикле отрабатывает инкрементация i, но единица добавляется не к 0, а уже к 10, и того получаем 11, если условие завершения цикла i<11 то цикл успешно завершается, i<12 в свою очередь позволит продолжить итерации, вызвать функцию, в ней опять отработает цикл, итератору i будет присвоено значение 10, дальше можно читать по кругу пока недоест.
как вариант можно ограничить область видимость с помощью let, либо давать разные названия переменным
for(i = 0;i < 12; i++)SwapOrder("1234567890");
function SwapOrder(str){
split=str.split("").reverse();
string='';
for(let i = 0; i < str.length; i+=2){
string+=split[i+1]+split[i];
}
return string;
}