【问题标题】:Javascript for loop not running correctly [duplicate]Javascript for循环未正确运行[重复]
【发布时间】:2014-06-28 13:18:35
【问题描述】:

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

【问题讨论】:

标签: javascript html arrays canvas kineticjs


【解决方案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));
}

【讨论】:

  • 你是说关闭是问题还是解决方案?
  • 这行得通!为什么?我以前从来没有在 for 循环中这样做过。有什么原因吗?
  • @cooper:我想你已经看过其他问题并得到了解释?
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 2022-11-23
  • 2015-02-22
  • 1970-01-01
  • 2012-08-29
  • 2016-11-10
  • 2019-05-28
  • 2022-11-01
相关资源
最近更新 更多