这一直困扰着我很长时间,所以我创建了一个测试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 秒后看到蓝色。编辑:这是第二种情况的小提琴。
为什么我的第一个小提琴会做它做的事情?它适用于许多其他情况,尤其是关于 AJAX。