2015-02-06 86 views
0

我有一个变量作用域的问题。下面的代码给了我未定义的变量错误。我可以直接在mymodule对象中定义cursorX。但我想这不是正确的方法,因为我最终会得到数十个变量。有没有什么办法可以在mouseTracking中声明变量?javascript undefined变量里面的函数里面的setInterval

var mymodule = { 
    variable1 : false, 
    variable2 : false, 
    //some more variables 

    somefunctionname: function(){ 

    }, 

    //some more functions 

    mouseTracking: function(){      
      var cursorX; 
      var cursorY; 
      document.onmousemove = function(e,cursorX,cursorY){ 
       cursorX = e.pageX; 
       cursorY = e.pageY;         
      } 
      setInterval("mymodule.saveCursor("+cursorX+","+cursorY+")", 300); 
    },     
} 
+0

你意识到'cursorX'和'cursorX'不会在区间进行更新。 – epascarello 2015-02-06 19:50:31

回答

1

你是通过你的功能setInterval()的方式要求其在全球范围内,它也是“冻结”在其初始值cursorXcursorY因为你构建字符串只有当setInterval()是内置一次首先叫。但cursorXcursorY甚至还没有价值,所以不能成为你想要的,因为它不会工作。

所以,现在我猜你想要setInterval()使用cursorXcursorY的实时最新值。你可以做到这一点与函数引用这样的:

setInterval(function() { 
    mymodule.saveCursor(cursorX, cursorY); 
}, 300); 

这将使用的cursorXcursorY最近保存的版本,虽然它看起来像你不一定初始化那些东西,直到第一个鼠标移动事件发生。

+0

@epascarello - 我不看你的答案。我试图弄清楚OP想要什么。他们的代码“冻结了cursorX和cursorY的值,他们原来是这样的,这是我提供的第一个解决方案,但是后来我想了很多,并且认为这可能不是他们想要的,因为cursorY和cursorX不'所以,基于此,我猜想OP要做什么,我改变了我的答案。 – jfriend00 2015-02-06 19:56:42

+0

Tnx,这解决了我的问题! – JohnyFree 2015-02-06 19:57:54

0
setInterval("mymodule.saveCursor("+cursorX+","+cursorY+")", 300); 

实际上是

setInterval("mymodule.saveCursor(undefined,undefined)", 300); 

它不会随着时间的推移更新,它会永远是不确定的。

你需要使用一个封闭

setInterval(function() { mymodule.saveCursor(cursorX,cursorY); }, 300);