これは何年もの間私を悩ませてきたので、状況を説明するためにテストjsFiddleを作成しました。
コードは次のとおりです。
$('#test').on('click', function() {
$(this).css('background', 'red');
for (var i = 1; i < 100000; i++) {
var el = document.createElement("div");
el.innerHTML = "Another";
document.getElementById("container").appendChild(el);
}
});
さて、まず背景色を変えてから、子の作成が始まると思いました。for
ただし、ループが終了するまで色は変わりません。
ただし、ループsetTimeout
の代わりに遅延を設定した場合はそうではありません。for
var timeoutID = window.setTimeout(function () {
$('#test').css('background', 'blue');
}, 2000);
このsetTimeout
場合、2秒後に瞬間的に赤と青が表示されます。編集:これが2番目のケースのフィドルです。
なぜ私の最初のフィドルはそれがすることをするのですか?これは、他の多くの状況、特にAJAXに関して適用されます。