Не возвращается значение из функции

вот такая функция:
function auth() {
            //**********************************************************************************************
            // Создаём объект XMLHTTP
                var xmlhttp = new XMLHttpRequest();
            // Открываем асинхронное соединение
                xmlhttp.open('POST', "http://example.ru/index.php", true);
            // Отправляем POST-запрос
                xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                xmlhttp.send("api=" + encodeURIComponent("clientjs") + "&my_k=" + encodeURIComponent("client_32b7cjacd542cgvw_end") + "&login=" + encodeURIComponent(user) + "&us_k=" + encodeURIComponent(key) + "&socket=" + encodeURIComponent(msg.name));
            // Ждём ответа от сервера
                xmlhttp.onreadystatechange = function() {
            // Ответ пришёл
                if (xmlhttp.readyState == 4) {
            // Сервер вернул код 200 (что хорошо)
                if(xmlhttp.status == 200) {
            // Записываем ответ сервера 
                var reply = xmlhttp.responseText;
                if (reply == 'Its ok'){
                return '1';
                } else {
                return '0';
                }}
                };
            }}
var auth = auth();
дописываю " alert(auth); " выводит: "undefined" в чем причина?
1 ответ

в чем причина?
связка команд var auth = auth(); alert (auth); исполняется мгновенно, т.е. сразу после присваивания переменной auth возвращаемого значения функции вызывается окошко alert ()а функция ваша работает с перерывом, т.е. сначала уходит запрос к серверу и потом ваша безымянная функция по onreadystatechange минимум 4 раза срабатывает (пока статус ответа меняется на 1, потом на 2, на 3, и, наконец, на 4) четыре срабатывания функции требуют времени, которого вы браузеру не даётекроме того, ваш возврат - он происходит из безымянной функции в функцию auth (), что является бредом, потому что в функции auth () нет присваивания возвращаемого значенияи какой дурак научил вас давать разным объектам одинаковые имена? если - это имя функции, то переменной следует дать хоть немного отличающееся от имени функции имя например, у Вэ-Вэ-Пуссина научились идиотизму?