Javascript HTML5成员函数中的作用域
我是一个尝试使用HTML5的古老的C程序员,有点困难。我定义了一个全局函数“MouseHandler”,其中包含该函数的局部变量,包括X和LastMsg MouseHandler中有一个函数MoveHandler,在Javascript HTML5成员函数中的作用域,javascript,html,function,variables,scope,Javascript,Html,Function,Variables,Scope,我是一个尝试使用HTML5的古老的C程序员,有点困难。我定义了一个全局函数“MouseHandler”,其中包含该函数的局部变量,包括X和LastMsg MouseHandler中有一个函数MoveHandler,在if(PostFunc)I处放置一个断点,我发现局部变量的值为: ABCStr是“QQQ” DefStr为“下降417358” LastMsg是“下降417358” Mouse.LastMsg是“QQQ” X是417 LocalX是417 代码是: var MouseHandler
if(PostFunc)
I处放置一个断点,我发现局部变量的值为:
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。正如预期的那样,使用reference Mouse.LastMsg似乎引用了外部函数的LastMsg的值
我是不是漏掉了什么明显的东西?有人能告诉我HTML5变量范围的在线参考资料吗?这将为我澄清这个问题。这些范围界定问题完全与JavaScript有关,与HTML5无关 JavaScript的变量作用域虽然看起来与C族块作用域相同,但实际上是函数级作用域。JavaScript将从最里面的函数开始,向外搜索以“解析”变量,因此因为在
MoveHandler()
函数中没有LastMsg
的定义,JavaScript沿着作用域链向上到达您在MouseHandler
变量中定义的匿名函数,并在那里找到LastMsg
并解析为字符串QQQ
当您在MoveHandler()
函数中更改LastMsg
的值时,JavaScript只需丢弃QQQ
值,并创建一个新字符串,并将其引用分配给该变量,因为JavaScript字符串是不可变的
有关这方面的好链接有:
Javascript没有隐式声明,除非在严格模式之外的全局范围(如果启用严格模式,则为错误)。也许您有某种计时错误?有些与:Jan重叠-谢谢。没有直接回答我的问题,但我学到了更多关于严格的模式和范围规则的知识,这些规则使我走上了正确的道路。马克-你的也有同样的帮助。