我试图理解回调,所以我创建了一个测试代码来检查异步行为。
function wait() {
while (new Date() < 2000 + new Date().getTime()){}
console.log("end");
}
console.log("start");
wait();
function clicke(){
console.log("click!")
}
document.addEventListener('click', clicke);
因此,我希望记录 start
然后 clicks
当我执行它们时,2 秒后 end
。但问题是所有事件通知都在打印出 start
和 end
之后。
我做错了什么?
最佳答案
JavaScript 是单线程的,while 循环会阻塞线程。在 while 循环中忙等待两秒钟后,它会处理您正在创建的事件。要在两秒内记录一条消息,请执行以下操作:
setTimeout(function(){console.log("message")}, 2000);
参见 https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout
关于JavaScript 异步事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31927639/