Javascript 如何在while循环期间检查事件?
我正在尝试制作一个系统,在这个系统中,你可以调用一个函数,并且所说的函数会一直等到按下一个键,然后函数才会结束,因此会停止程序,直到按下下一个键 我已经尝试在while循环中使用一个变量,但是,如果我尝试在keydown事件中更改该变量,那么如果循环正在运行,它将不会更改Javascript 如何在while循环期间检查事件?,javascript,events,while-loop,Javascript,Events,While Loop,我正在尝试制作一个系统,在这个系统中,你可以调用一个函数,并且所说的函数会一直等到按下一个键,然后函数才会结束,因此会停止程序,直到按下下一个键 我已经尝试在while循环中使用一个变量,但是,如果我尝试在keydown事件中更改该变量,那么如果循环正在运行,它将不会更改 var x = true; myFunction (event) { x = false; } document.addEventListener("keydown", myFu
var x = true;
myFunction (event) {
x = false;
}
document.addEventListener("keydown", myFunction);
function wait () {
x = true;
while (x);
}
wait();
这不会返回任何错误消息,但是,程序在按下键后不会继续。恐怕这不是编写javascript的方式。您所做的就是所谓的“阻塞”,Javascript不应该阻塞。如果您想处理按键之类的事件,应该使用回调,然后从回调内部继续程序 因此:
恐怕这不是你写javascript的方式。您所做的就是所谓的“阻塞”,Javascript不应该阻塞。如果您想处理按键之类的事件,应该使用回调,然后从回调内部继续程序 因此:
最好的方法是将函数的其余部分放在
keydown
回调中运行,例如:
console.log('start');
document.addEventListener("keydown", () => {
// put the rest of the code in here
wait();
}, { once: true });
console.log('start');
document.addEventListener(“keydown”,()=>{
//把剩下的代码放在这里
log(“其余代码正在运行”);
},{once:true})代码>
首先单击此处
最好的方法是将函数的其余部分放在键下
回调中运行,例如:
console.log('start');
document.addEventListener("keydown", () => {
// put the rest of the code in here
wait();
}, { once: true });
console.log('start');
document.addEventListener(“keydown”,()=>{
//把剩下的代码放在这里
log(“其余代码正在运行”);
},{once:true})代码>
首先单击此处
Javascript是单线程的,因此while(x)代码>将无限期地停止代码<代码>“因此停止程序”
这是您永远不想在javascript中执行的操作。JS是一种单线程事件驱动语言,因此不可能停止程序执行(然后恢复)。@Olian04我意识到了这一点,但是,我正在尝试在按键后更改x,但是,我不确定如何在循环期间检查按键。在JavaScript中,无法在“循环期间”检查按键。它使用所谓的“事件循环”来管理代码执行。总之,事件排队等待当前调用堆栈为空,然后才能进行处理。因此,您的while
循环实际上阻止了事件处理程序的运行,因为调用堆栈永远不会清除。并且非常好地解释了过去JSConf会谈中的事件循环代码>将无限期地停止代码<代码>“因此停止程序”
这是您永远不想在javascript中执行的操作。JS是一种单线程事件驱动语言,因此不可能停止程序执行(然后恢复)。@Olian04我意识到了这一点,但是,我正在尝试在按键后更改x,但是,我不确定如何在循环期间检查按键。在JavaScript中,无法在“循环期间”检查按键。它使用所谓的“事件循环”来管理代码执行。总之,事件排队等待当前调用堆栈为空,然后才能进行处理。因此,您的while
循环实际上阻止了事件处理程序的运行,因为调用堆栈永远不会清除。并且非常好地解释了过去JSConf会谈中的事件循环。