2015-01-06 9 views
1

В Javascript при вызове асинхронной операции/события создается сообщение с функцией обратного вызова операции/события (функция, которая запускается только после завершения операции/события).Начальный запуск JavaScript-файла

Когда операция/событие завершено (или запущено), сообщение переходит в очередь сообщений. Эта очередь сообщений постоянно проверяется (этот опрос известен как «цикл событий»), и, когда сообщение находится в очереди, обратный вызов сообщения помещается в столбец и запускается. Затем мы возвращаемся к циклу событий и либо ждем нового сообщения, либо получаем следующее сообщение в очереди и запускаем его обратный вызов.

Мой вопрос: прежде чем все это при первом запуске JavaScript будет запущено все те же самые вызовы перед запуском цикла событий?

ответ

1

Это довольно интересный вопрос. Кто-то, несомненно, даст лучшее объяснение, поскольку я не совсем понимаю, что происходит, но из моего тестирования я решил, что ответ на ваш вопрос - нет.

Возьмем следующий пример кода:

alert('start'); 

var cats = document.getElementById('cats'); 

cats.addEventListener('click', function() { 
    alert('cats'); 
}); 

cats.click(); 

alert('finish'); 

оповещения пожара следующим образом: start, cats, finish. Тот факт, что cats появляется до finish, подтверждает, что сообщение добавляется в цикл событий, когда код выполняется, а не после.

http://jsfiddle.net/3bm2pz86/

+0

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

+0

@Nathan Возможно, но, к сожалению, это невозможно. Если вам посчастливилось провести какое-то исследование и выяснить его, вернитесь и опубликуйте свои выводы! –