Ну, для меня он также выполняет бесконечный цикл без предупреждений.
Кажется, что проблема в следующем выражении: parseInt(currentPos+1)
Добавление происходит до преобразования изстрока в число, например:
currentPos = '4';
currentPos + 1 == '41';
parseInt(currentPos + 1) == 41
То, что вы хотите, вероятно, parseInt(currentPos) + 1
. Теперь:
currentPos = '4';
parseInt(currentPos) + 1 == 5
С этим цикл, кажется, завершается, и я получаю результат 3 перестановок из него.