実際の問題を確認するには、この jsbinを参照してください。ボタンをクリックすると、buttonHandler()
次のような がトリガーされます。
function buttonHandler() {
var elm = document.getElementById("progress");
elm.innerHTML = "thinking";
longPrimeCalc();
}
このコードは、div のテキストを「thinking」に変更し、longPrimeCalc()
完了するまでに数秒かかる算術関数である を実行すると予想されます。しかし、これは起こりません。代わりに、"longPrimeCalc" が最初に完了し、2 行のコードの順序が逆になったかのように、実行が完了した後にテキストが "thinking" に更新されます。
ブラウザは「innerHTML」コードを同期的に実行するのではなく、独自のタイミングで実行する新しいスレッドを作成するようです。
私の質問:
- この動作を引き起こしているフードの下で何が起こっているのでしょうか?
- ブラウザーが期待どおりに動作するようにするには、つまり、" " を実行する前に "innerHTML" を強制的に更新するにはどうすればよい
longPrimeCalc()
ですか?
これを最新バージョンのクロムでテストしました。