我在as3中有一个非常复杂的功能。该函数由许多嵌套在其中的函数组成。 main函数有变量,它的所有嵌套函数也都有自己的变量。一些嵌套函数由主函数或另一个嵌套函数中添加的事件调用。
现在我想知道,我的主要功能何时会被垃圾收集?代码何时不在主函数之外?何时将变量和事件以及嵌套函数进行垃圾回收?
P.S。:添加更多细节。想象一下,我的main函数叫做loadImages(),它包含一堆嵌套函数:connectToServer(),sortImages()和onImagesLoaded()。 首次调用loadImages()时,它将创建一个url变量和一个images数组变量。然后它将调用它的内部函数connectToServer()。此函数将连接到服务器,开始下载图像并添加onComplete事件侦听器,在加载所有图像时将调用onImagesLoaded()。加载所有图像后,由于该事件,将调用onImagesLoaded()。此函数将删除onComplete事件侦听器,并将调用sortImages()并将加载的图像作为参数传递给它。之后,sortImages()将按字母顺序对图像进行排序,并将它们放在主函数loadImages()的图像数组中。最后,loadImages()会将数组中的图像添加到舞台上。
谢谢。
答案 0 :(得分:1)
嵌套函数将从外部函数捕获变量,并可能意外或不必要地保留这些变量的生命周期。您应该避免使用嵌套函数,除非您特别需要它们提供的额外功能(捕获外部变量)。
使用嵌套函数也会带来性能损失,但它实际上只会出现在无用的微基准测试中,而这些基准测试永远不会影响真实世界的应用程序。
如果您需要使用嵌套函数,请确保在完成它们时将它们作为事件侦听器删除。这样做将使它们可用于垃圾收集。您可以确保始终将它们注册为弱事件侦听器,以便不会将事件计入它们(或它们捕获的变量)是否可用于GC。但是,由于它们是嵌套函数,所以很可能唯一保留它们的是事件注册。