Я нашел довольно сложные ответы, связанные с классами, обработчиками событий и обратными вызовами (которые кажутся мне несколько кувалдой). Я думаю, что обратные вызовы могут быть полезными, но я не могу применить их в простейшем контексте. См. Этот пример:
<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>
В этом вторая функция завершается перед первой функцией; что является самым простым способом (или есть один?), чтобы заставить вторую функцию отложить выполнение до тех пор, пока первая функция не будет завершена?
--- Edit ---
Итак, это был пример мусора, но благодаря Дэвиду Хедлунду я вижу в этом новом примере, что он действительно синхронный (вместе с сбоем моего браузера в процессе тестирования!):
<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>
Как моя ФАКТИЧЕСКАЯ проблема была с jQuery и IE, мне придется опубликовать отдельный вопрос об этом, если я не могу нигде себя достать!