我有一个需要执行的代码。它是使用kinetic.js用于HTML5画布的项目的一部分。
我运行for loop
来浏览此数组并使用eval()
执行数组中的代码。该数组称为tiles
,其中一部分可能如下所示:
context.fillStyle="rgb(255,255,255)";
context.beginPath();
context.moveTo(256,197);
context.lineTo(177,241);
context.bezierCurveTo(172,237,167,232,162,228);
context.fill();
现在我将for循环与正常的动力学代码结合起来,遍历数组,执行代码并在画布上创建形状。例如:
var layer = new Kinetic.Layer();
for (var i=0 ;i<5; i++) {
var tile = new Kinetic.Shape({
sceneFunc: function(context){ eval(tiles[i]); }
});
layer.add(tile);
}
stage.add(layer);
但是这只添加了一个数组项!!这到底是怎么回事?这是非常令人困惑的,因为如果我写出for循环,它就可以了。像这样:
var tile = new Kinetic.Shape({
sceneFunc: function(context){ eval(tiles[0]); }
});
layer.add(tile);
var tile = new Kinetic.Shape({
sceneFunc: function(context){ eval(tiles[1]); }
});
layer.add(tile);
var tile = new Kinetic.Shape({
sceneFunc: function(context){ eval(tiles[2]); }
});
layer.add(tile);
etc...
答案 0 :(得分:1)
关闭:
var layer = new Kinetic.Layer();
for (var i=0 ;i<5; i++) {
(function(num) {
var tile = new Kinetic.Shape({
sceneFunc: function(context){ eval(tiles[num]); }
});
layer.add(tile);
}(i));
}