Majax,
я тоже не очень шарю, но думаю, что код где return latlng на 14 строке выполняется быстрее чем обработается запрос в гугл мапс внутри функции geocode, поэтому сначала выводит undefined, а потом выбивает результат
alert(latlng);//в этом месте значение переменной считается и существует