можно попробовать перевести код функции к циклу через конструкцию с throw и try-catch
try будет ловить исключение, выбрасываемое, когда стек переполнен, а catch будет менять значение аргументов, ибо они передаются в объекте исключения. и так бесконечно, пока не выйдем из функции
бредовый пример
правда чутка мимо кассы
функция
function foo (from) {
return from ? foo ( document.body.innerHTML = --from ) : from;
}
вызываем
foo(1e6);
JSBIN --->
http://jsbin.com/rojeguze/1
и её взломанный вариант
function foo (from) {
function foo () {
throw arguments;
}
while (true) {
try {
// START
return from ? foo ( document.body.innerHTML = --from ) : from;
// END
} catch (e) {
from = e[0];
}
}
}
Осторожно! Firefox замерзает на несколько секунд.
JSBIN --->
http://jsbin.com/ridibaye/1