Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在while循环期间检查事件?_Javascript_Events_While Loop - Fatal编程技术网

Javascript 如何在while循环期间检查事件?

Javascript 如何在while循环期间检查事件?,javascript,events,while-loop,Javascript,Events,While Loop,我正在尝试制作一个系统,在这个系统中,你可以调用一个函数,并且所说的函数会一直等到按下一个键,然后函数才会结束,因此会停止程序,直到按下下一个键 我已经尝试在while循环中使用一个变量,但是,如果我尝试在keydown事件中更改该变量,那么如果循环正在运行,它将不会更改 var x = true; myFunction (event) { x = false; } document.addEventListener("keydown", myFu

我正在尝试制作一个系统,在这个系统中,你可以调用一个函数,并且所说的函数会一直等到按下一个键,然后函数才会结束,因此会停止程序,直到按下下一个键

我已经尝试在while循环中使用一个变量,但是,如果我尝试在keydown事件中更改该变量,那么如果循环正在运行,它将不会更改

    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会谈中的事件循环。