방금 AS3에서 중첩 된 기능을 발견했으며 (예, 파티에 늦음) Flex 프로젝트에서이 기능을 사용하고 있습니다. 필자는 본질적으로 eventListeners와 함께 모달 연산에 별도의 함수를 사용해야하는 것을 싫어했습니다. 코드에 혼란을 주며 연산 논리를 분리하고 로컬 변수를 쉽게 참조 할 수 없습니다.이벤트 리스너와 함께 중첩 된 함수를 사용하는 데 문제가 있습니까?
아래의 예는 디렉토리를 선택하는 사용자가 매우 잘 작동하는 것처럼 보입니다.하지만이 방법을 사용하는 데 문제가 있는지 궁금합니다. 또한 비모수 조작 (예 : Loader
과 같은 비동기)에서는 중첩 함수를 사용할 수 있습니까?
private var rootDirectory:File;
protected function rootBtn_clickHandler(event:MouseEvent):void
{
var tmp:File = File.desktopDirectory;
tmp.browseForDirectory("Set Project Folder");
tmp.addEventListener(Event.SELECT, onUserSelect);
tmp.addEventListener(Event.CANCEL, onUserCancel);
function onUserSelect(event:Event):void
{
tmp.removeEventListener(Event.SELECT, onUserSelect);
tmp.removeEventListener(Event.CANCEL, onUserCancel);
rootDirectory = event.target as File;
}
function onUserCancel(event:Event):void
{
tmp.removeEventListener(Event.SELECT, onUserSelect);
tmp.removeEventListener(Event.CANCEL, onUserCancel);
trace("user canceled");
}
}
함수의 범위를 알고 있고 메모리 누수가 발생하지 않도록하십시오. 괜찮습니다. Loader에서 사용할 수 있지만 일반적으로 가비지 수집되지 않도록 유지하는 유일한 리스너는 리스너 자체이므로 약한 리스너를 사용할 수 없으며 종료 할 때 리스너를 제거해야합니다. 그렇지 않으면 리스너가 그대로 유지됩니다. 영원히 기억. 대부분의 사람들은 AS3에서 멀리 떨어져 있습니다. (일반적으로 사람들에게 권장합니다.) 메모리 누출을 쉽게 만들거나 실수로 수집 한 가비지를 쉽게 가져올 수 있기 때문입니다. – BadFeelingAboutThis
@LDMS - 감사합니다! 그것은 GC로 인해 약한 참조를 사용하지 않는 것에 대한 훌륭한 세부 사항이며 완전한 의미를가집니다. 이 게시물을 게시 한 후 Loader에서 중첩 된 함수를 사용하여 시도했지만 가능한 모든 이벤트를 처리하면 코드가 자체적으로 클래스가 될 정도로 커지지 만 문제가 없습니다. 하지만 사용자 응답을 처리하는 것과 같은 작은 작은 것들에 대해서는이 중첩 된 접근법을 정말 좋아합니다 (이벤트 리스너가 적다는 것을 싫어합니다.) –