Thursday, January 14, 2010

Особенности WebKit

Обнаружил интересную особенность браузеров удостоенных на WebKit: если js функции вызываются не в порядке объявления, то возникает исключение при попытке их вызвать на обработку события(Uncaught ReferenceError: somefunc is not defined). В ff все работает нормально он может вызывать функции, если они объявлены в другом порядке(хотя бы в одном файле).

Причиной по моему мнению является: (хотя бы для Chrome звучит правдоподобно) попытка браузера перед выполнением(на этапе парсинга) перевести весь js во внутренний байт код - в результате чего он может сразу выявить и заменить вызовы функций на их адреса и проверить корректность кода с проверкой корректности использования свойств объектов. (Выдать ошибку, если у объекта не какого-то свойства к которому обращаются - то есть: есть проверка типов для объектов с однозначно определяемым типом).

Пояснение об изначальных данных - была страница на которой не срабатывали нажатия на кнопки в Safari, при однозначном возврате из функции(alert('A');return;) до вызова функции идущего ниже по коду все работает, без возврата исключение при вызове функции(сообщается что функции не определена).

P.S.: В обычном состоянии исключения не показываются нужно открыть окно отладки(инспектор элементов).

2 comments:

  1. Интересно..
    Исключение возникает сразу при загрузке JS файла или в момент выполнения одной из этих функций?

    ReplyDelete
  2. При клике по элементу отображается исключение Uncaught ReferenceError:..

    ReplyDelete