Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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的局部作用域中赋值后仍保持未定义状态_Javascript - Fatal编程技术网

为什么全局变量在javascript的局部作用域中赋值后仍保持未定义状态

为什么全局变量在javascript的局部作用域中赋值后仍保持未定义状态,javascript,Javascript,我对闭包属性的理解是,函数范围内的每个变量都可以访问函数所在父范围内的所有变量 因此,考虑到这个定义,我不理解下面代码的行为: var mouseX, mouseY; window.onload = function() { this.addEventListener('mousemove', function() { mouseX = event.clientX; mouseY = event.clientY }); // mouseX an

我对闭包属性的理解是,函数范围内的每个变量都可以访问函数所在父范围内的所有变量

因此,考虑到这个定义,我不理解下面代码的行为:

var mouseX, mouseY;

window.onload = function() {

    this.addEventListener('mousemove', function() {
        mouseX = event.clientX;
        mouseY = event.clientY
    }); // mouseX and mouseY are defined

    petObj = new Pets();


   }

function Pets(){
document.getElementById('imageList').addEventListener('mouseenter',function()
                                       {
                                       console.log(mouseX)} //undefined mouse X!!!
                                       }

我接受在匿名函数中为mousemove事件侦听器分配mouseX,以引用在函数外部声明的全局变量。但正如您所看到的,它在匿名函数的作用域之外保持未定义状态

您正在设置事件处理程序的“load”处理程序中记录“mouseX”的值。尚未发生任何事件,因此变量仍
未定义


变量是可用的,如果您在事件处理程序中放置一个
console.log()
调用,或者在某些“mousemove”事件发生后代码将运行的其他地方,您将看到值正在更新。

我将变量的名称从mouseX更改为mouseXX,它可以工作,但不确定它为什么工作,也许jquery名称空间弄乱了变量名

我也在pet对象中检查了它,它似乎也没有定义:(,感谢您指出之前应该处理好这个问题asking@Snedden27直到“mousemove”出现时,它才被定义事件已成功处理。我确实处理了鼠标移动事件,并分配了它,但mouseX在pets()函数中仍然未定义。如果您能解释一下为什么认为
console.log()
call应该打印鼠标坐标值,它可能会帮助其他人为您提供更好的解释。