Javascript变量范围之谜

卢卡什·扎德克

我正在查看我的一些旧代码,我可以看到这一点,这让我很困惑。代码被简化并位于函数(对象)内。

$('#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事件侦听器的setIntervalcallBack 函数callBack 函数顶级函数,因此,它们都可以访问该mouseX变量。

您可以在此处阅读有关Closures 的更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章