在Javascript中从setTimeout函数中更新对象的属性值
我对下面的代码片段有问题在Javascript中从setTimeout函数中更新对象的属性值,javascript,settimeout,Javascript,Settimeout,我对下面的代码片段有问题 var flag = { f: 0 }; setTimeout(function(flag) { flag.f+=1; }, duration, flag); while(flag.f == 0); alert("Asd"); “Asd”从未发出警报。一段时间后,页面崩溃。它有什么问题?设置超时会停止执行其余代码。Settimeout将运行,然后while循环将运行,因此它永远不会执行 这是对实际发生的事情的一个非常简单的版本。有关更多信息: 编辑
var flag = { f: 0 };
setTimeout(function(flag) {
flag.f+=1;
}, duration, flag);
while(flag.f == 0);
alert("Asd");
“Asd”从未发出警报。一段时间后,页面崩溃。它有什么问题?设置超时会停止执行其余代码。Settimeout将运行,然后while循环将运行,因此它永远不会执行 这是对实际发生的事情的一个非常简单的版本。有关更多信息: 编辑: 在更好地理解你的问题后,似乎这就是你想要的:
var flag = { f: 0 };
setTimeout(function(flag) {
flag.f+=1;
afterMove()
}, duration, flag);
function afterMove() {
alert("move is done!");
}
那是一篇很好的文章。它仍然不能帮我解决我的问题。现在我明白了这是不可能的。因此,我无法等待setTimeout中的函数执行?请尝试使用setIntervalI。我认为这不会帮助我解决问题。看,我正在做一个游戏,我计算了我的精灵移动1像素所需的时间。移动1像素,等待那么长时间。然后我看看我的精灵是否与什么东西相撞。因此,我需要等到我的精灵完全移动了1个像素,然后再检查碰撞。我知道这不是我问题的一部分。但后来我不知道Javascript是一种单线程语言。更新的答案-我希望我理解正确