gpt4 book ai didi

performance - Actionscript 3 中循环的变量声明性能

转载 作者:行者123 更新时间:2023-12-04 16:26:18 24 4
gpt4 key购买 nike

尽管有关于这个问题的所有已知博客,但我总是怀疑一些结果,我的个人测试表明,说得好的标准并不是最好的。

在循环内声明变量,使它们靠近其作用域并使其更快地被方法访问,但分配更多内存或在 之外声明为 范围以节省内存分配但增加处理以在远程实例中进行迭代。

我的结果表明方法 B 更快(有时),我想知道这方面的背景。

结果各不相同,我不是位刷机大师。

那么大家怎么看呢?

方法 A

var object:Object = new Object();
var loop:int = 100000
for (var i:int = 0; i < loop; i++)
{
object = new Object();
object.foo = foo;
object.bar = bar;
}

或者

方法 B
var loop:int = 100000
for (var i:int = 0; i < loop; i++)
{
var object:Object = new Object()
object.foo = foo;
object.bar = bar;
}

最佳答案

AS3 编译器将所有变量声明移动到方法的顶部,这称为变量提升。一个变量的最小范围是一个完整的方法。您的方法 B 等效于以下内容:

var loop:int = 100000;
var i:int;
var object:Object;
for (i = 0; i < loop; i++) {
object = new Object();
object.foo = foo;
object.bar = bar;
}

请注意,它仅将声明向上移动,而不是与此关联的赋值。这就是您可以在使用变量后声明变量的原因。例如试试这个代码:
trace(a);
var a:int = 10;
trace(a);

这将编译。这是因为这段代码等价于:
var a:int;
trace(a);
a = 10;
trace(a);

这也是您将收到带有以下代码的重复变量声明警告的原因:
for (var i:int = 0; i < m; i++) {

}
for (var i:int = 0; i < n; i++) { // i is already declared once

}

AS3、JS中变量作用域的概念不同于C、C++、Java等。

关于performance - Actionscript 3 中循环的变量声明性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com