我正在试图弄清楚用户操作触发的事件是如何发生的。
在下面的例子中,事件是否会发生在两个函数之间,导致只执行第二个函数?
var mouseDown = false;
element.addEventListener('mousedown', function(evt) {
mouseDown = true;
}, false);
function loop() {
doSomething();
// Can mouseDown be set to true here?
doSomethingElse();
mouseDown = false;
requestAnimationFrame(loop);
}
function doSomething() {
if (mouseDown) {
// Do something
}
}
function doSomethingElse() {
if (mouseDown) {
// Do something else
}
}
是否会发生这种情况,或者是在循环之间推迟的事件?
答案 0 :(得分:1)
不,这绝不会发生 * 。
Javascript事件处理是单线程的,这意味着只要您的代码正在运行,就不会处理任何事件。
退出函数(loop
)并将控制权返回给浏览器时,可以恢复事件处理。
(*)例外情况是,如果您在该代码中有alert
之类的对话框,那么在某些浏览器中可能会处理某些事件。