eval()函数不适用于全局范围

时间:2016-02-18 23:42:55

标签: javascript eval createjs

我正在使用CreateJS为对象设置动画。

我想将circle形状移动到for循环中更改的位置。

    var x = {
        time: 200,
        x: 0,
        y: 0
    };

每次形状在for循环中设置动画后,我都会更改此变量。

    for(var i = 0; i < 4; i++) {
        createjs.Tween.get(circle)
            .to({x: hits.x, y: hits.y}, hits.time);

    hits.x += 200;
    hits.y += 200;
    }

我将增量值设置为4,但我要更改它。这就是我每次动画时都不直接使用.to函数的原因。我不想为每一个增量对每个循环进行硬编码。我需要创建一个可以接收任何增量值的函数,并相应地为其设置动画。

我尝试了这个,但后来意识到如果另一个动画正在进行中,动画就不会发生。

然后我使用eval函数将所有值添加到字符串中,然后将其作为一个整体添加,因为.to()函数是可链接的。

     var bounceString = "createjs.Tween.get(circle)";
     for(var i = 0; i < 4; i ++) {
        bounceString += ".to({x: hits.x, y: hits.y}, hits.time)";

    hits.x += 200;
    hits.y += 200;
    }
    bounceString += ";";
    eval(bounceString);

通过对字符串使用eval函数,我可以使用任何增量值并相应地设置形状,而无需对其进行硬编码。但是,有一个问题。

我不知道为什么,但它说hits变量未定义。我还尝试在bounceString中定义该变量,但它没有成功。我也尝试将它变成一个全局变量(因为整个代码都在一个函数中)。

我尝试在hits中定义bounceString时显示的错误是 -

Error

只有在我尝试在字符串本身中定义变量时才会发生这种情况。

我知道eval函数很危险,但这是唯一的方法。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

我不知道createjs的API是什么。但是,我希望存储从createjs.Tween.get()获得的内容然后执行.to()将比<{1}}更好地

请考虑以下代码:

eval()