Javascript 范围界定问题

Javascript 范围界定问题,javascript,handlers,Javascript,Handlers,控制台日志(结果); console.log(isPressed)//即使我按了一个键,它也会显示为0,并且它已更改为1 如果我在有问题的If循环中执行console.log(isPressed),它会工作。这是一个我不知道的范围问题。请帮助 提前感谢问题在于同步。您的代码如下所示: 按下键时,将isPressed设置为1 显示所显示的值 第一条指令只是说明了在以后某个时间点会发生什么,它就完成了。在按下任何键之前,第二条指令紧跟其后,因此显示0。如果您要执行第三个指令: var isPress

控制台日志(结果); console.log(isPressed)//即使我按了一个键,它也会显示为0,并且它已更改为1

如果我在有问题的If循环中执行console.log(isPressed),它会工作。这是一个我不知道的范围问题。请帮助


提前感谢

问题在于同步。您的代码如下所示:

按下键时,将
isPressed
设置为1

显示所显示的

第一条指令只是说明了在以后某个时间点会发生什么,它就完成了。在按下任何键之前,第二条指令紧跟其后,因此显示0。如果您要执行第三个指令:

var isPressed =0;
document.body.onkeypress = function(evt)
{
  evt = evt || window.event;

    if (evt.keyCode!=='undefined') {
        // Do your stuff here
        isPressed = 1;
        console.log(isPressed);//Here it gives 1
    }
//return isPressed;
}
result = navigator.appVersion +"|"+n+"|"+getStyle(mydiv,'opacity')+"|"+history.length+"|"+metarefesh+"|"+hasFocus+"|"+navigator.platform+"|"+parent.top.document.referrer+"|"+activexenable+"|"+javaEnabled+"|"+hasFlash+"|"+navigator.plugins.length+"|"+ hasMouseMoved+"|"+isClicked +"|"+**isPressed**+"|"+isresized+"|"+isScrolled+"|"+getStyle(mydiv,'zIndex');
然后在页面加载后(3秒钟之前)按一个键,您将看到一个日志,其中
的isPressed
设置为1


如果在按下某个键后需要执行其他逻辑,则需要将其放在注释“在此处执行您的操作”。以下是这些
控制台的核心答案。log
输出的是什么:

Javascript具有异步处理事件的概念。当您使用
onkeypress
事件时,可以利用这一点

JS文件的其余部分执行它需要执行的操作(包括设置事件),然后当触发事件时(通过按键),它运行其中的代码

实际上,JS文件是这样做的:

  • 将变量
    isPressed
    设置为
    0
  • 将此匿名函数设置为onkeypress发生
    onkeypress
  • 日志
    已压入控制台
  • 每当实际发生
    onkeypress
    时,让我们运行我们在步骤2中设置的匿名函数
  • 当您到达步骤3时,实际上还没有对
    isPressed
    变量执行任何操作,因此它将其记录为
    0

    稍后,当您按下
    on键时,实际上是在更改
    isPressed
    的值,因此它记录为
    1


    您还应该注意,绑定到
    onkeypress
    的匿名函数并不是专门返回
    isPressed
    。您需要将
    return isPressed
    添加到底部(注释所在的位置)


    因为这是一个绑定到事件的匿名函数,所以没有理由这么做。该值不会出现在任何地方,如果要操作
    isPressed
    变量,您设置的作用域是理想的。

    这与作用域无关。只是
    console.log(isPressed)
    在事件处理程序之外,在按键之前执行,我对这段代码没有任何意义。。如果
    不是循环,则它是一个条件表达式。如果要在按键后执行某项操作,请在事件处理程序中执行该操作,或从事件处理程序调用该操作。@PSL谢谢。您可以解释一下代码吗。谢谢。因此,我的目标是查看窗口上是否按了任何键,并将isPressed event设置为1。当按下任何键时。我的最终输出是这样的。所以结果变量应该能够访问isPressed的值;“查看是否按了任何键”->您需要知道什么时候?我已在代码中添加了结果变量,需要访问isPressed变量。请帮助。@EvanSiegel.have alok查看我的代码更改。结果变量是我尝试访问它的位置,但值仍然为0。Thanks@SwarajChhatre,在触发事件之前,您仍在设置
    result
    变量。如果将其放在事件函数中,它将被正确设置。您应该注意,javascript没有按照您在文件中写入它的顺序运行。再看看事情发生的顺序。
    window.setTimeout(function(){console.log(isPressed)}, 3000);