在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是一种单线程语言。更新的答案-我希望我理解正确