为什么即使在javascript中在本地范围内为其赋值之后,全局变量仍未定义

Sne*_*n27 3 javascript

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

所以考虑到这个定义我不明白我的代码的行为如下:

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!!!
                                       }
Run Code Online (Sandbox Code Playgroud)

我接受在mousemove事件监听器的匿名函数中指定mouseX来引用在函数外声明的全局变量.但是你可以看到它在匿名函数范围之外保持未定义

Poi*_*nty 6

您正在设置事件处理程序的"load"处理程序中记录"mouseX"的值.尚未发生任何事件,因此变量仍然存在undefined.

这些变量可用的,如果你console.log()在事件处理程序中调用一个调用,或者某个"mousemove"事件发生代码运行,那么你会看到值被更新.