Как это работает?
Всем привет!
Я не силен в JS, но так получилось, что играясь с ExtJS написал код, который работает =) Но теперь я не могу понять почему и как? =) Вот непонятный мне кусок: Ext.define('MHCalendar.view.CalendarGrid', { extend: 'Ext.panel.Panel', calendar: new Ext.calendar.panel.Month(), initComponent: function () { this.callParent(); var calendar = this.calendar; var btnNext = new Ext.button.Button({ text: '>', handler: function () { calendar.nextMonth(); } }); var btnPrev = new Ext.button.Button({ text: '<', handler: function () { calendar.previousMonth(); } }); this.add(this.calendar, btnPrev, btnNext); } }); Непонятность в том, каким образом засунув локальную переменную calendar в handler она продолжает существовать после инициализации и нормально отрабатывает при нажатии на кнопку? Там как-то указатель остается или что? Поясните пожалуйста. ПС: Я тут кое что лишнее убрал из кода, чтобы поменьше было. Кнопки на самом деле в отдельном контейнере добавляются. |
|
Спасибо за ссылку! Интересно! =)
Никогда целенаправленно не изучал JS, но постоянно приходится сталкиваться и каждый раз открываю для себя что-то новое =) Правильно ли я понял, что при создании функции обработчика к ней добавляется ссылка на Scope в котором и хранится опять же ссылка на переменную calendar? И что, в JS все функции хранят в себе всю цепочку вызовов? Со всеми переменными окружения? :blink: |
Цитата:
|
Ясно. Спасибо!
Немного приоткрыл мне глаза на JS. |
Часовой пояс GMT +3, время: 23:36. |