2015-02-06 67 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);