Для большой рекурсии, что делает этот код? - PullRequest
3 голосов
/ 09 марта 2011

Я реализовал часть этого скрипта, чтобы помочь мне с отладкой

var ZFDebugLoad = window.onload;
window.onload = function(){
   if (ZFDebugLoad) {
      ZFDebugLoad();
   }
   ZFDebugCollapsed();
};

Firebug выдает ошибку "break on Error too too recursion"

Код для меня выглядит такбесконечный цикл, так что мне интересно, почему оригинальный автор вставил его. Также нет возврата в функции, поэтому ZFDebugLoad никогда не будет иметь значения ...

РЕДАКТИРОВАТЬ Фактическая причинадля этой ошибки (для любых других людей, которые следовали тому же учебнику, который я сделал, причиной ошибки была эта строка

$response->setBody(preg_replace('/(<head.*>)/i', '$1' . $this->_headerOutput(), $response->getBody()));

, которая использует шаблон регулярного выражения /(<head.*>)/i, это привело к добавлению скрипта вмой HTML5 <header> тэг, чтобы исправить это, я вставил пробел в шаблон /<head(?!er).*?>/i

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Если указанный выше скрипт загружается дважды, он будет повторяться бесконечно.

При первой загрузке скрипта он будет работать так, как ожидалось. Однако при второй загрузке сценария исходное значение window.onload будет потеряно, а значения window.onload и ZFDebugLoad будут одной и той же функцией.

Поскольку window.onload теперь проверяет ZFDebugLoad, который определен, он будет запускать его, но теперь это та же функция, поэтому он снова проверит ZFDebug, который определен, он запустит это, ...

до бесконечности.

2 голосов
/ 09 марта 2011

ZFDebugLoad сохраняет старое значение window.onload, а затем заменяет его другой функцией.

В окне load сначала запускается исходная функция, если она была, а затем запускается ZFDebugCollapsed.
Вам не нужно возвращаемое значение. В JavaScript функции имеют значения . if (ZFDebugLoad) проверьте, является ли ZFDebugLoad undefined или нет, то есть, если у вас уже была функция window.onload до запуска скрипта Если это не udefined, его можно выполнить.

...