我的Javascript代码中的错误:范围问题或逻辑问题?

时间:2014-06-02 20:23:20

标签: javascript

我的蛇游戏随处可见,而不是正常移动: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向外看,看看是否已经存在?我假设后者。

2 个答案:

答案 0 :(得分:0)

temp = this.body[i].clone();创建一个新对象,因此您正在创建无法翻译的新对象。

正如@MikeW在评论中指出的那样,JavaScript中没有for块范围;范围界定是全局的或仅限于函数。因此,代码中的tempfor循环的内部和外部都是相同的变量。

答案 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使用功能范围而不是阻止范围。