我对闭包属性的理解是函数作用域内的每个变量都可以访问函数所在的父作用域中的所有变量,
因此,考虑到这个定义,我不理解下面代码的行为:
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来引用在函数外声明的全局变量。但是你可以看到它在匿名函数范围之外保持未定义
答案 0 :(得分:6)
您正在记录" mouseX"的值在#34;内部加载"设置事件处理程序的处理程序。尚未发生任何事件,因此该变量仍为undefined
。
变量 可用,如果你在事件处理程序或其他地方放置console.log()
调用,那么代码将在之后运行 #34;鼠标移动"事件已经发生,您将看到正在更新的值。
答案 1 :(得分:0)
我将变量的名称从mouseX更改为mouseXX并且它可以工作,不确定它为什么工作,也许jquery命名空间搞乱了变量名