我正在查看我的一些旧代码,我可以看到这一点,这让我很困惑。代码被简化并位于函数(对象)内。
$('#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
正确),并且它没有在父函数/对象中创建“成员”变量。
有人可以启发我一点吗?
这是一个叫做“Clousre”的概念的结果
...闭包使您可以从内部函数访问外部函数的作用域... - MDN。
该mouseX
变量是在一个函数中声明的,该函数的作用域是提供给mousemove
事件侦听器的setInterval
callBack 函数和callBack 函数的顶级函数,因此,它们都可以访问该mouseX
变量。
您可以在此处阅读有关Closures 的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句