考虑这个闭包:
var getFunction = function(a, b, c) {
return function () {
console.log("A");
foo(a, b, c); // takes a couple of seconds
console.log("B");
}
}
当我像这样使用它时
var bar = getFunction(a, b, c);
bar();
它将输出" A"和" B"在foo中完成计算后立即 - 而不是输出" A",等待foo完成,然后输出" B"。
为什么?
答案 0 :(得分:1)
问题是无论是登录控制台还是样式元素都无法阻止JS执行。也就是说,首先该函数将完全运行,然后控制台将显示排队的项目或元素的样式将被更新。
document.body.style.background = 'red';
var d = new Date();
while(new Date() - d < 1e3); // Wait 1 second
document.body.style.background = 'green';
例如,在上面的代码段中,您看不到红色背景,因为代码执行如下操作:
相反,您可能需要类似
的内容为了实现这一目标,您必须将代码拆分为不同的部分并将其延迟。
document.body.style.background = 'red';
setTimeout(function() {
var d = new Date();
while(new Date() - d < 1e3); // Wait 1 second
setTimeout(function() {
document.body.style.background = 'green';
}, 100);
}, 100);
然后,浏览器将能够利用该延迟在控制台中记录内容或更新元素的样式。