firebug (1.10.1) sugeruje, że javascript nie ogranicza się do pojedynczego wątku w firefox (13.0)

Podczas debugowania javascript po stronie klienta w Firefoksie, wpadłem na coś, co uważałem za dość dziwne i trochę niepokojące. Nie mogłem też powielić tego zachowania podczas debugowania tego samego skryptu za pomocą IE / VS2010.

Stworzyłem prosty przykładowy dokument HTML, aby zilustrować anomalię, którą widzę.

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type="text/javascript" ></script>
</head>

<body id="main_body">
    <script type="text/javascript">
        $(function () {
            $(".test-trigger").on("click", function () {
                loadStuff();
                console && console.log && console.log("this will probably happen first.");
            });
        });

        function loadStuff() {
            $.get("http://google.com/")
                .fail(function () {
                    console && console.log && console.log("this will probably happen second.");
                });
            }
    </script>
    <button class="test-trigger">test</button>
</body>
</html>

Jeśli załadujesz ten dokument do Firefoksa (używam wersji 13.0 z Firebug w wersji 1.10.1 w systemie Windows 7), kliknij test i przejrzyj zakładkę konsoli w Firebug, powinieneś zauważyć, że żądanie pobierania się nie powiedzie (naruszenie zasad między domenami, które nie ma nic zrobić z punktem, który próbuję tutaj zrobić), a potem najprawdopodobniej zobaczysz:

this will probably happen first.
this will probably happen second.

Teraz umieść punkty przerwania w liniach 13 i 20:

13: console && console.log && console.log("this will probably happen first.");
20: console && console.log && console.log("this will probably happen second.");

Jeśli klikniesz ponownie test, przerwiesz wiersz 13 zgodnie z oczekiwaniami. Teraz wznów wykonanie. Jeśli twoje doświadczenie jest jak moje, nie złamiesz się w linii 20. Również po przełączeniu na kartę konsoli zobaczysz następującą sekwencję danych wyjściowych dziennika:

this will probably happen second.
this will probably happen first.

Dla mnie sugeruje to, że program obsługi niepowodzeń żądania ajax jest wykonywany w wątku innym niż ten, w którym wykonywana jest obsługa kliknięcia. Zawsze uważano, że wszystkie javascript dla jednej strony będą wykonywane przez pojedynczy wątek w dowolnej przeglądarce. Czy brakuje mi tutaj czegoś naprawdę oczywistego? Dziękujemy za wgląd w tę obserwację.

Och, jeśli debuguję tę samą stronę uruchomioną w IE przy użyciu Visual Studio, oba punkty przerwania są trafiane tak, jak powinienem.

questionAnswers(3)

yourAnswerToTheQuestion