Показать сообщение отдельно
  #32 (permalink)  
Старый 08.07.2014, 01:23
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

можно попробовать перевести код функции к циклу через конструкцию с 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

Последний раз редактировалось melky, 08.07.2014 в 01:30.
Ответить с цитированием