Javascript 为什么这个闭包中的代码是整体执行的?
考虑这一结束:Javascript 为什么这个闭包中的代码是整体执行的?,javascript,Javascript,考虑这一结束: 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(); 在foo中完成计算后,它将
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();
在foo中完成计算后,它将立即输出“A”和“B”,而不是输出“A”,等待foo完成,然后输出“B”
为什么会这样?问题在于,无论是登录控制台还是设置样式元素都不会阻止JS的执行。也就是说,首先函数将完全运行,然后控制台将显示排队的项目,或者更新元素的样式
document.body.style.background='red';
var d=新日期();
while(新日期()-d<1e3);//等一秒钟
document.body.style.background='绿色'代码>旁注:在我的应用程序中,我试图设置一个等待光标。为了简单起见,我在示例中使用了“console.log”。您的意思是foo
在A和B出现在控制台之前运行吗?foo
可能是异步的……console.log“为了简单起见”可能是一个不好的示例,因为它在某些方面是异步的。您使用什么机制读取这些值?您的问题可能是javascript是单线程的,当长foo
正在执行时,没有任何东西可以访问A
的值
和$(“*”).css(“光标”、“默认值”)代码>而不是console.log-结果相同。非常感谢您的详细解释!不幸的是,我的投票没有资格。不过,我的问题已经解决了。谢谢