什么是 所有 [1]和[2]之间的主要实际差异?
[1](我知道如果你在函数之外声明你可以在多个函数中使用变量):
var myNumber:Number = 42;
function functionOne():void
{
trace(myNumber);
return;
}
function functionTwo():void
{
trace(myNumber);
return;
}
[2]:
function functionOne():void
{
var myNumber:Number = 42;
trace(myNumber);
return;
}
一些具体问题:
〜当多次调用包含变量声明的函数时,变量会发生什么?
〜[1]和[2]之间的性能有何差异?
〜循环或条件语句中的变量声明是否还有其他差异?
((这里)和{here})
答案 0 :(得分:2)
在C. Parcell暗示的某些条件下,性能有很大差异。
想想一个渲染引擎。如果你要在每一帧中创建一个新的变量,它就会变得太糟糕,但是如果那个帧需要调用你的函数几万次呢?然后你会积累很多变量,直到垃圾收集器最终开始运行。而GC不会在每一帧都运行,因为这会让你的应用程序停止运行。
而且,通过多次重复,变量的创建比分配一些变量需要更多的时间。一般来说,如果你是在演出之后,如果你(以任何方式)计划在冗长/繁重的循环中使用它们,那么尽可能多地将vars范围扩展到类中是非常有用的。但是,在某些情况下,您可能实际上想要在循环中创建一个新变量,因此在进行作用域/调试时请记住这一点。
与在自己类的const
中存储其他类的函数相同的原则,如internal static const abs:Function = Math.abs;
。性能差异是微不足道的,但如果有足够的重复,它确实会产生影响。从本质上讲,这会创建一个'副本。编译期间的函数,以便执行命令所需的查找更短一步(abs
而不是Math
然后abs
)。
答案 1 :(得分:1)
区别在于变量的范围, 正如Karma在评论中所建议的那样,你会在这里找到你要搜索的内容:
更具体一点:
〜当包含变量的函数时,变量会发生什么 声明被多次调用?
每个函数调用都有一个正确的堆栈,因此每次调用相同的函数时都会创建另一个变量。
〜1和[2]之间的表现是否存在差异?
我不确定,但我认为这不是问题。真正的区别在于你的代码可读性,它允许一个函数通过这个变量与另一个变量进行交互,这可能不是你想要的。
〜循环中的变量声明是否还有其他差异 或条件陈述?
((这里)和{here})
同样,不同之处在于范围,当您声明变量时,它只能在其范围内访问。