我的蛇游戏随处可见,而不是正常移动:http://jaminweb.com/Snake.html (用箭头键移动)
我想知道这是否是范围问题。
相关代码是
var temp = this.body[0].clone();
// ....
this.body[0].translate(this.dx, this.dy);
for (var i = 1, j = this.body.length; i < j; ++i)
{
var lastBB = temp.getBBox();
var thisBB = this.body[i].getBBox();
temp = this.body[i].clone();
this.body[i].translate(lastBB.x-thisBB.x,lastBB.y-thisBB.y);
}
我想知道,dees
temp = this.body[i].clone();
在for
循环内部创建一个新变量,或者Javascript向外看,看看是否已经存在?我假设后者。
答案 0 :(得分:0)
temp = this.body[i].clone();
创建一个新对象,因此您正在创建无法翻译的新对象。
正如@MikeW在评论中指出的那样,JavaScript中没有for
块范围;范围界定是全局的或仅限于函数。因此,代码中的temp
在for
循环的内部和外部都是相同的变量。
答案 1 :(得分:-2)
此变量始终指向其定义的上下文。
function Constructor1
{
this.x = 1; // points to the objects instantiated by Constructor1
}
var a = new Constructor1;
a.x = 1; // `this` points to a
var b = new Constructor1;
b.x = 1; // `this` points to b
function func()
{
return this; // points to the calling function, returns itself
}
func() will return the function itself
Javascript使用功能范围而不是阻止范围。