success
обратный вызов Ext.Ajax.request
вызывается после того, как AJAX-запрос был возвращен. Это означает, что функция, которая вызвала его (и func1()
, и inner_function2()
, уже вернулась, и их область была удалена.
Давайте попробуем показать последовательность событий
func1()
называется
- локальная переменная
var1
объявлена
inner_function2()
называется (я полагаю, вы его где-то называете)
Ext.Ajax.request()
вызывается с success
объявленным обратным вызовом
inner_function2()
заканчивается - AJAX-запрос выполняется в фоновом режиме
func1()
заканчивается, локальная переменная var1
удаляется (она все еще доступна в области обратного вызова) - запрос AJAX выполняется в фоновом режиме
- AJAX-запрос завершается -
success
callback вызывается. Поскольку локальной переменной нет var1
, создается глобальная переменная и ей присваивается значение a
(см. Комментарии ниже, почему это удаляется). Локальная переменная var1
по-прежнему доступна в области обратного вызова, но после завершения обратного вызова переменная больше нигде не доступна, поэтому ее нельзя использовать.
Помните, что «A» в AJAX означает «асинхронный».