【问题标题】:Defining for loop iterator before the for loop?在for循环之前定义for循环迭代器?
【发布时间】:2011-06-02 04:33:54
【问题描述】:

最近有人批评我像这样构建for 循环:

var i:MovieClip;
for each(i in array)
{
    // be awesome
}

或者,

var i:uint = 0;
for(i; i<10; i++)
{
    // be more awesome
}

这对我个人来说更好,但我却因此受到攻击。有任何区别吗?

【问题讨论】:

  • 你可能想提一下这是什么语言。
  • 别担心,怎么样..
  • 你甚至可以在 for() 循环中删除第一个 i for(;i&lt;10;i++)
  • 谁在攻击你?如果我在两个循环中使用相同的索引变量,我通常使用这种格式,在同一个函数中。有时我只是在第一个 for 循环的定义中这样做。 (两者都在功能范围内)

标签: actionscript-3 variables loops


【解决方案1】:

旧答案

是的:按照您的操作方式,变量在循环结束后仍然存在。确保变量不存在于循环范围之外,确保您永远不会意外地在循环之外引用它。

更新:

至少大多数语言都是这样做的。但是,在 ActionScript 中,for 循环变量在父级的范围内!所以在 ActionScript 中确实没有区别

【讨论】:

  • 虽然我仍然可以从循环外部访问已在 for 循环中定义的变量..
  • 真的吗?好吧,我在你指定语言之前回答了,而在大多数语言中你不能。
  • 啊,对不起。即使我尝试了两个 for 循环(让我们说上面除了在 for() 语句中定义的 i 之外),也会与 i 发生冲突。
  • 哦……看完this我要更新我的答案了。
  • 我会给你这个,因为我没有正确标记问题是我的错,你的第一个答案会很好地记住 - 谢谢:)
【解决方案2】:

trutheality 的答案是大多数语言中最好的考虑因素,考虑到这个问题直到后来才被标记为 actionscript-3,这是一个很好的回应。

但是,Actionscript 使用变量提升,其中在函数中定义的变量anywhere 的作用域是该函数而不是其最里面的块。这个blog post 描述的很好,在docs on variable scope 中也提到了。由于提升,在 Actionscript 中在循环之前或循环内定义变量没有区别。

为了展示这有多疯狂,你甚至可以在循环之后定义变量:

for (i = 0; i < 5; i++) {
  trace(i);
}
var i:int;

【讨论】:

  • 恶心——我一点也不喜欢。尽管 ActionScript 执行此操作的方式对我很有用,因为您可以中断循环并在之后返回 i 的值(就像循环中断时一样)。
  • 我也不喜欢它。我不确定他们为什么会以如此微妙的方式打破常规。通常人们在遇到莫名其妙的编译器错误之前不会弄清楚这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2012-06-27
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多