クラス、イベント ハンドラー、およびコールバックを含むかなり複雑な回答しか見つかりませんでした (これは、やや大ハンマーのアプローチのように思えます)。コールバックは役に立つかもしれないと思いますが、最も単純なコンテキストではこれらを適用できないようです。次の例を参照してください。
<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>
この場合、2 番目の関数は最初の関数の前に完了します。最初の関数が完了するまで 2 番目の関数の実行を強制的に遅らせる最も簡単な方法 (または 1 つある?) は何ですか?
- -編集 - -
これはくだらない例でしたが、David Hedlund のおかげで、この新しい例で実際に同期していることがわかります (テスト プロセスでブラウザがクラッシュしました!):
<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にあったので、自分でどこにも行けない場合は、それについて別の質問を投稿する必要があります!