2010-01-07 3 views
0

Вопрос SO (load-and-execution-sequence-of-a-web-page) предоставляет детали в порядке выполнения html-страницы. В нем указано, что тег скрипта выполняется последовательно с одним потоком.Последовательность выполнения Javascript

Я следующий код на моей странице:

if(booleanTest)eval('parent.'+callback+'();'); 
    parent.hideWin(); 
    return false; 

Если предположить, что метод обратного вызова, имеющий простой, а цикл, который баллотировался на большое число раз (например: 30К раз), я заметил, что hideWin выполнялся еще до завершения обратного вызова. (Проверено на IE7)

Дело в том, что если выполнение является последовательным, то почему это вышеприведенное поведение на месте - это что-то конкретное для браузера ?.

+0

Как вы уверены, что обратный вызов выполнен? Возможно, браузер пытается оптимизировать большое количество операций пользовательского интерфейса и задерживать повторное рендеринг некоторых эффектов обратного вызова, а вызов hideWin объединяется с некоторыми итерациями? – Yuliy

+2

Обратите внимание, что вам редко требуется 'eval'. В этом случае вы можете использовать тот факт, что свойства объекта можно получить с помощью строковых ключей: 'if (booleanTest) {parent [callback](); } '. Если 'callback' на самом деле не является строкой, именовавшей метод, определенный в' parent', то причина 'parent.hideWin()' выполняется так быстро, что скрипт 'eval'-ed терпит неудачу. – outis

+1

+1 для того, чтобы избавиться от оценок для доступа к собственности, которые были распространены в 1995 году, я поражен тем, что люди все еще пишут это сейчас –

ответ

0

Да, вторая строка будет выполнена только после if + eval. я бы сделал предупреждение перед hidewin, чтобы проверить, является ли booleanTest и любое другое состояние ожидаемым vals