![]() |
Функции внутри функций - почему это зло?
Добрый день,
извините за назойливость, но мне необходимо понять - почему плохо создавать функции внутри функций? И как правильно организовать следующий код? Код:
public function loadImg():Void { |
Код:
class имя класса { |
dashaaa, ну во-первых, приведенный вами код не будет работать, просто потому что onLoadError не принадлежит объекту oLoadListener. А вложенные функции плохи тем, что во первых, плывет область видимости и начинаются проблемы с обращением к различным свойствам и объектам, во вторых, вместо того, что создать метод один раз в памяти, он постоянно пересоздается новый.
|
Дело в том, что функция просто выполняется при вызове, и выполнившись, возвращает результат или меняет чтото вне себя. После того, как она выполнилась, все ее внутренние переменные больше недоступны, точнее их уже нет. Все эти переменные - mclLoader, oLoadListener, и функция onLoadError() существуют лишь до тех пор, пока выполняется loadImg(), потому что это ее внутренние переменные. Они как пассажиры пролетающего вагона - могут разговаривать друг с другом, но Вы, на полустаночке), ни словом с ними не перекинетесь. Пролетая мимо, они Вам могут крикнуть "загрузи картинку и отдай Васе на пятом сиденье", но пока Вы сбегаете за картинкой - ни Васи, ни сиденья.
(из моего поста могло создаться впечатление, что дело во времени, но на самом деле конечно в областях видимости - т.е. нормальная организация подразумевает, что Вася стоит с Вами на полустаночке. Т.е. функция не должна быть внутри другой функции) |
Цитата:
Но вообще-то идея ясна, спасибо. __etc, спасибо, с областью видимости уже столкнулась, и то, что метод пересоздаётся - это аргумент. Wolsh, спасибо, понятно =) |
создавайте экземпляр MovieClipLoader в конструкторе класса
|
Функция внутри функции - это нормальное явление, просто надо знать для чего это нужно.
То, что "поезд уходит" тоже не совсем верно: Код:
function A(){ |
хы-хы
в делигаторе функция внутри функции, но там правда ссылка на неё живая |
Цитата:
|
Цитата:
Цитата:
|
| Часовой пояс GMT +4, время: 15:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.