Jak wymusić sekwencyjne wykonanie Javascript?

Znalazłem dość skomplikowane odpowiedzi dotyczące klas, procedur obsługi zdarzeń i wywołań zwrotnych (które wydają mi się nieco podejrzane). Myślę, że wywołania zwrotne mogą być przydatne, ale nie wydaje mi się, aby zastosować je w najprostszym kontekście. Zobacz ten przykład:

<html>
  <head>
    <script type="text/javascript">
      function myfunction()  {
        longfunctionfirst();
        shortfunctionsecond();
      }

      function longfunctionfirst() {
        setTimeout('alert("first function finished");',3000);
      }

      function shortfunctionsecond() {
        setTimeout('alert("second function finished");',200);
      }
    </script>
  </head>
  <body>
    <a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
  </body>
</html>

W tym przypadku druga funkcja kończy się przed pierwszą funkcją; jaki jest najprostszy sposób (a może taki?), aby wymusić opóźnienie wykonania drugiej funkcji do momentu zakończenia pierwszej funkcji?

---Edytować---

To był przykład bzdury, ale dzięki Davidowi Hedlundowi widzę w tym nowym przykładzie, że jest on rzeczywiście synchroniczny (wraz z awarią przeglądarki w procesie testowym!):

<html>
<head>

<script type="text/javascript">
function myfunction() {
    longfunctionfirst();
    shortfunctionsecond();
}

function longfunctionfirst() {
    var j = 10000;
    for (var i=0; i<j; i++) {
        document.body.innerHTML += i;
    }
    alert("first function finished");
}

function shortfunctionsecond() {
    var j = 10;
    for (var i=0; i<j; i++) {
        document.body.innerHTML += i;
    }
    alert("second function finished");
}
</script>

</head>

<body>
  <a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
</body>
</html>

Ponieważ mój RZECZYWISTY problem dotyczył jQuery i IE, będę musiał wysłać osobne pytanie na ten temat, jeśli sam nie będę mógł się nigdzie dostać!

questionAnswers(10)

yourAnswerToTheQuestion