Во время разработки Circles and Squares была обнаружена следующая фишка AS3.
Раньше приходилось делать так:
Code
button.addEventListener(MouseEvent.CLICK, buttonClickHandler);
...
function buttonClickHandler(e:Event):void {
trace('hello world!!!');
}
Этот способ мне долгое время не нравился, приходилось для каждой кнопки писать отдельную функцию. Можно конечно решить эту проблему создением своего класса кнопки, этим я одно время и обходился, но потом выяснилось что можно делать все намного проще:
Code
button.addEventListener(MouseEvent.CLICK, function() {trace('hello world!!!');});
Вообщем, внутри function() {} можно писать любой набор строчек кода.
При описании любой функции можно задавать в качестве одного из параметров функцию func1:Function, и в качестве значения присваивать function() {}.
Например:
Code
function callFunction(func1:Function):void {
func1(null);//Выполняем функцию
}
...
callFunction(function() {trace('Hello World!!!')})
Короче, изгаляться можно как угодно - делать несколько таких вложений; задавать саму функцию как параметр при вызове самой себя, это будет самая натуральная рекурсия; В этом смысле AS3 оказывается очень гибкий язык.
Единственный недостаток - при этом некорректно работает автоформатирование кода.