Javascript for循环无法正常运行

时间:2014-05-11 00:20:08

标签: javascript html arrays canvas kineticjs

我有一个需要执行的代码。它是使用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...

1 个答案:

答案 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));
}