我一直在用 ActionScript (Haxe) 编写一些东西,并遇到了这个非常具体的问题。
这是代码(伪:S):
var func:Array = new Array(256);
(A) var i:Int = 0;
for(;i<256;i++) { // OR // for(i in 0...256) {
func[i] = function() { trace(i); }
}
func[0]();
func[127]();
func[256]();
上面的代码输出(a):
256
256
256
我希望是(b):
0
127
256
这不会发生,因为 ActionScript/Haxe 正在将 i 的引用分配给函数,并且由于在对函数进行评估的循环结束时 i 等于 256,这就是我得到 (a) 的原因。
有谁知道避免这种情况并在 (b) 处获得预期结果的方法?
感谢你们所有人和你们的回答。
我想我找到了答案。如果您删除标有 (A) 的行,它可以工作,如果您离开它,它不会。我很确定你们都可以弄清楚为什么会发生这种情况。再次感谢!