Вызов функции из цикла
UPD. Прошу прощения, наверно я ошибся разделом. Просьба к модераторам: Если можно, перенесите тему пожалуйста.
---------------- Здравствуйте. В JS я новичок, и поэтому может быть глупый вопрос задам. В общем столкнулся с проблемой вызова функции из цикла, приводящей к зависанию браузера. Задача скрипта состоит в том, что бы шифровать некое слово введенное пользователем. Шифрование производится методом вставки N-количества рандомных символов между ключевыми буквами слова. <script type="text/javascript"> function rnd(uNum) { var rnd_length = set_chars.length; var Arr_num = new Array(uNum); Arr_num.pop(); for(i = 0; i < uNum; i++) { var rnd_Number = Math.round(Math.random() * rnd_length); var j = set_chars.charAt(rnd_Number); Arr_num.push(j); } return Arr_num; } var userWords_2 = window.prompt("Введите предложение для смешания букв cо сторонними символами (без пробелов):"); var userNum = window.prompt("Введите число для встаки других букв между символами:"); var set_chars = "~!@#$%^&*()_+-|\"/=№;%:?<>/ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,йцукенгшщзхъфывапролджэячсмитьбю.QWERTYUIOPASDFGHJKLZXCVBNMqqwertyuiopasdfghjklzxcvbnm"; var contakt = new Array(); for (i = 0; i < userWords_2.length; i++) { var e = i+1; var tmp_word = userWords_2.slice(i,e); contakt.push(tmp_word); } var j = rnd(userNum); // Если функция вызывается не из цикла - все хорошо... for (i=1; i < contakt.length; i+=2) { contakt.splice(i,0,j); // Здесь, на месте j, по идее должен находится вызов функции: rnd(userNum). } document.write("<br /><br />" + contakt + "<br />"); P.s. Кроме этого интересна технология дальнейшего объединения полученной строки. На данном этапе финальный результат работы скрипта (если забыть про не работающую в цикле функцию) выглядит так: Слово: УчусьJS. N = 2 Шифруем: У,",S,ч,B,?,у,G,н,с,_,Е,ь,g,^,J,T,у,S К сожалению, метод contakt.join("") не помогает убрать все запятые. Буду благодарен за любой совет! Спасибо! |
В общем, разобрался в проблеме зависания браузера.
Проблема заключалась в переменной "i", которая при вызове функции из цикла получала новое значение. Поменял на "k". Все заработало. |
не лучший способ
вместо того что бы "гадить" переменными, лучше нормально их объявить for (var i=1; |
Часовой пояс GMT +3, время: 19:42. |