Javascript 变量作用域之谜
Javascript variable scope riddle
我正在查看我的一些旧代码,我可以看到这一点,这让我很困惑。
代码被简化并位于函数(对象)内。
$('#element')
.on('mousedown', function(e){
var mouseX = e.pageX;
$('body').on('mousemove', function(e){
mouseX = e.pageX;
});
timer = setInterval(function(){
console.log(mouseX);
}, 100);
})
.on('mouseup mouseleave', function(){
$('body').off('mousemove');
});
我需要 mouseX
在每个间隔触发时保持最新状态,所以当时,当我的编程理解有点粗略时,我只是想,太好了,让我们在另一个事件中更新该变量(鼠标移动)。
我想现在看看 - 那个局部变量如何在另一个范围内更新,这是独立创建的,然后在完全不同的(间隔)范围内成功使用,也是独立创建的?!
代码有效(mouseX
是正确的),它没有在父 function/object.
中创建 "member" 变量
谁能给我讲讲。
这是一个名为 "Clousre"
的概念的结果
...a closure gives you access to an outer function’s scope from an inner function... - MDN.
mouseX
变量在函数中声明,该函数的范围是给定 mousemove
事件侦听器和 setInterval
回调函数的回调函数的顶层,因此, 他们都可以访问 mouseX
变量。
您可以在此处阅读有关 Closures 的更多信息。
我正在查看我的一些旧代码,我可以看到这一点,这让我很困惑。 代码被简化并位于函数(对象)内。
$('#element')
.on('mousedown', function(e){
var mouseX = e.pageX;
$('body').on('mousemove', function(e){
mouseX = e.pageX;
});
timer = setInterval(function(){
console.log(mouseX);
}, 100);
})
.on('mouseup mouseleave', function(){
$('body').off('mousemove');
});
我需要 mouseX
在每个间隔触发时保持最新状态,所以当时,当我的编程理解有点粗略时,我只是想,太好了,让我们在另一个事件中更新该变量(鼠标移动)。
我想现在看看 - 那个局部变量如何在另一个范围内更新,这是独立创建的,然后在完全不同的(间隔)范围内成功使用,也是独立创建的?!
代码有效(mouseX
是正确的),它没有在父 function/object.
谁能给我讲讲。
这是一个名为 "Clousre"
的概念的结果...a closure gives you access to an outer function’s scope from an inner function... - MDN.
mouseX
变量在函数中声明,该函数的范围是给定 mousemove
事件侦听器和 setInterval
回调函数的回调函数的顶层,因此, 他们都可以访问 mouseX
变量。
您可以在此处阅读有关 Closures 的更多信息。