我在课堂上有这个功能:
private function fireItemCreated(data: ByteArray): void {
setTimeout(function(): void {
var event: ItemCreatedEvent = new ItemCreatedEvent(data);
dispatchEvent(event);
}, 1000);
}
此函数调用以在创建图像缩略图时调度项目创建的事件。
但它会在一段时间内延迟事件,以防止用户界面冻结。而且我猜测如果垃圾收集器在 fireItemCreated 函数调用之后但在timer事件之前执行会发生什么。关闭是否会被删除,或者它将一直存在直到它将被执行?
答案 0 :(得分:4)
不可能发生。
如果调用该函数,则调用setTimeout
。传递给setTimeout
的函数对象创建了一个带有链接执行上下文的强闭包绑定,并且所有 setTimeout
回调函数都受到保护()(想象一下,你无法访问一个不可见的var timeouts = []
。如果计时器被邪恶的Grime船长神奇吞噬,那就不好玩了。
好问题和快乐编码。
所描述的问题实际上发生在其他一些语言及其定时器的实现中。请参阅.NET's Threading.Timer Class和说明。