Интересный подход к сохранению обработчиков событий

· На чтение уйдёт 1 минута · (163 слова)

http://www.levelofindustry.com/journal/2007/10/13/scope-access-and-event-handling.html автор пишет про переменные, определенные внутри функции, но продолжающие жизнь за ее пределами:


import flash.events.MouseEvent;

var clickHandler : Function;

function foo() : void
{
var firstName : String = "Samuel"
var lastName : String = "Agesilas";

this.stage.addEventListener(MouseEvent.CLICK, clickHandler = function(event:Event) : void
{
trace( event );
trace( "First Name:" + firstName );
trace( "Last Name:" + lastName );
});
}

foo();

Создавая переменную clickHandler вне "зоны видимости" функции (в данном примере, функции foo), мы получаем возможность сохранить обработчик события (с возможностью последующего удаления, в случае необходимости). Наибольшее преимущество здесь в том, что 'clickHandler' имеет доступ ко всем переменным и объектам в зоне видимости функции, уменьшая количество кода обработчика события и сложность его написания.


Маленькое замечание от меня: учитывая то, что все переменные, определенные в теле функции, видны глобально во всей функции, это довольно опасно - таким образом, будут сохранены и ссылки на объекты, которые, возможно, вообще никогда не понадобятся. Тем не менее, практическое применение этот подход найдет ) по меньшей мере у меня.

Полезное