Показать сообщение отдельно
  #2 (permalink)  
Старый 01.02.2014, 22:15
Интересующийся
Отправить личное сообщение для Nodeveloper Посмотреть профиль Найти все сообщения от Nodeveloper
 
Регистрация: 01.02.2014
Сообщений: 11

Потому что на момент вызова кода, переменная id определена, но не инициализирована, т.е. undefined.
Перед выполнением функции, интерпретатор ищет все упоминания var в теле функции, и определяет переменные в ее начале.
Код из вашего примера с точки зрения интерпретатора эквивалентен следующему коду:
function(a) {
            var id; // id === undefined
            alert(id); // undefined
            id = 1; // id === 1
        }


Вам нужно просто убрать var перед id в коллбэке, но тогда следует помнить, что все другие функции, заданные внутри func(id) и вызванные после того, как придет ответ от сервера, получат значение 1 в переменной id, т.е.
function func(id) {
        var func2 = function () {
               alert (id) // 1
        };	
	$.ajax({
		type: "post",			
		url: host+'/structure/branch',
		data: {id: id, type: 'all'},
		success: function(a) {
			alert(id); // undefined
			id = 1;	
                        func2();
		}
	});
}
func(0);
Ответить с цитированием