我是一位嘗試使用HTML5的古老C程序員,遇到了一些困難。我已經定義了一個全局函數「MouseHandler」,其中包含X和LastMsg這個函數的局部變量。HTML5成員函數中的作用域
函數MoveHandler距離MouseHandler,並放置一個斷點if (PostFunc)
我覺得本地變量的值是:
- ABCStr是「QQQ」
- DefStr是「打倒417358」
- LastMsg是 「打倒417358」
- Mouse.LastMsg是 「QQQ」
- X是417
- LocalX是417
的代碼是:
var MouseHandler = function (canvas1, terraincvs1, PostFunc1)
{
// ...
var X, Y;
var LastMsg = "QQQ";
// ...
function MoveHandler()
{
var ABCStr = Mouse.LastMsg;
var DEFStr = LastMsg;
var LocalX = X;
// ...
LastMsg = "Move " + X + ',' + Y;
if (PostFunc)
PostFunc ();
return { "LastMsg" : LastMsg }
}
cvs.addEventListener("mousedown", DownListener, false);
return { "DownListener" : DownListener, "UpListener" : UpListener, "MoveHandler" : MoveHandler,
"OffsetX" : OffsetX, "OffsetY" : OffsetY, "dX" : dX, "dY" : dY, "DownX" : DownX, "DownY" : DownY, "Down" : Down,
"LastMsg" : LastMsg }
}
// ...
var Mouse = new MouseHandler (canvas, HexCanvas, PostMouse);
似乎LocalX被適當地設置爲外部函數MouseHandler內定義的的「X」值,但LastMsg似乎是一個(隱式聲明)的局部變量在內部MoveHandler中,而不是引用(如我所預期的)在外部函數MouseHandler中定義的LastMsg。按照預期,使用引用Mouse.LastMsg似乎引用外層函數的LastMsg的值。
我在這裏錯過了一些明顯的東西嗎?有人可以指示我參考一個HTML5變量範圍的在線參考,它可以爲我澄清這個問題嗎?
JavaScript沒有隱含的聲明,除了在外面嚴格模式在全球範圍內(以嚴格的方式對,這是一個錯誤) –
也許你有某種時間錯誤? –
一些重疊:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work –