在函数内部声明变量和外部函数之间有什么区别

时间:2014-12-12 00:58:37

标签: actionscript-3 variables global-variables variable-declaration

什么是 所有 [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})

2 个答案:

答案 0 :(得分:2)

在C. Parcell暗示的某些条件下,性能有很大差异。

想想一个渲染引擎。如果你要在每一帧中创建一个新的变量,它就会变得太糟糕,但是如果那个帧需要调用你的函数几万次呢?然后你会积累很多变量,直到垃圾收集器最终开始运行。而GC不会在每一帧都运行,因为这会让你的应用程序停止运行。

而且,通过多次重复,变量的创建比分配一些变量需要更多的时间。一般来说,如果你是在演出之后,如果你(以任何方式)计划在冗长/繁重的循环中使用它们,那么尽可能多地将vars范围扩展到类中是非常有用的。但是,在某些情况下,您可能实际上想要在循环中创建一个新变量,因此在进行作用域/调试时请记住这一点。

与在自己类的const中存储其他类的函数相同的原则,如internal static const abs:Function = Math.abs;。性能差异是微不足道的,但如果有足够的重复,它确实会产生影响。从本质上讲,这会创建一个'副本。编译期间的函数,以便执行命令所需的查找更短一步(abs而不是Math然后abs)。

答案 1 :(得分:1)

区别在于变量的范围, 正如Karma在评论中所建议的那样,你会在这里找到你要搜索的内容:

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d.html

更具体一点:

  

〜当包含变量的函数时,变量会发生什么   声明被多次调用?

每个函数调用都有一个正确的堆栈,因此每次调用相同的函数时都会创建另一个变量。

  

1和[2]之间的表现是否存在差异?

我不确定,但我认为这不是问题。真正的区别在于你的代码可读性,它允许一个函数通过这个变量与另一个变量进行交互,这可能不是你想要的。

  

〜循环中的变量声明是否还有其他差异   或条件陈述?

     

((这里)和{here})

同样,不同之处在于范围,当您声明变量时,它只能在其范围内访问。