Порядок работы операторов в XmlHTTPRequest

Прочитал С чего начать. Там код идет в следующей последовательности

httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
httpRequest.open('GET', url, true);
httpRequest.send(null);

Но почему проверка состояния запроса httpRequest (получен ли ответ с сервера) и назначение обработчика - httpRequest.onreadystatechange происходит до открытия запроса и отправки на сервер? Логично оператор httpRequest.onreadystatechange = function() { alertContents(httpRequest); }; поставить после

httpRequest.open('GET', url, true);
httpRequest.send(null);


Ответы (1 шт):

Автор решения: Максим Вишневский

В onreadystatechange не происходит ничего «здесь и сейчас», вы просто присваиваете ваш обработчик в данный этап запроса, то есть он вызовется в момент триггера это хука, по сути на данном этапе вы делаете настройку для запроса, но это конфигурирование нужно сделать непосредственно до выполнения. А open и send вы непосредственно вызываете, как метод, то есть инициируется выполнение какого-либо этапа, тут порядок вызова уже важен.

→ Ссылка