Tak jak przedmówcy napisali, nie załatwisz tego w synchronicznym stylu (no chyba, że użyjesz generatorów lub async-await, ale na to chyba za wcześnie u Ciebie), tu masz przykład na callbackach:
$(function () {
// główny kod, zamiast zwracać i przypisywać do zmiennej dane z funkcji getData() przygotowujemy dla nich callback,
// w którym wykonujemy wszystkie potrzebne operacje (będzie on wywołany gdy dane zostaną pobrane):
getData(function (data) {
console.log('Pobrane dane:', data);
});
});
// funkcja z asynchroniczną akcją, przyjmująca callback (dowolną funkcję przyjmującą w tym wypadku jeden argument z wynikowymi danymi):
function getData(callback) {
$.get('https://jsonplaceholder.typicode.com/todos/1', function (data) {
callback(data);
});
}
CodePen: http://codepen.io/anon/pen/NAzXpZ?editors=0012
Możesz też wykorzystać domknięcie i ustawić wynik jako widoczny dla całego scopa, choć oczywiście nie będzie od razu, dopiero jak wynik zostanie przesłany przez serwer:
$(function () {
// początkowa wartość danych:
var mainData = {};
// przypisanie wynikowych danych do głównej zmiennej
getData(function (data) {
mainData = data;
});
// tu jeszcze nowe dane nie są dostępne, bo wcześniejsze zapytanie nadal się wykonuje,
// a wykonanie programu poleciało dalej bez blokowania skryptu:
console.log('mainData tuż po wywołaniu getData():', mainData); // => Object {}
// no ale w pewnym momencie zapytanie w końcu coś zwróci i wartość mainData zostanie zaktualizowana,
// zasymulujemy to timeoutem:
setTimeout(function () {
console.log('mainData po timeoucie:', mainData); // jeśli serwer nie zamuli to powinniśmy zobaczyć już niepusty obiekt
}, 2000);
});
// funkcja z asynchroniczną akcją, przyjmująca callback (dowolną funkcję przyjmującą w tym wypadku jeden argument z wynikowymi danymi):
function getData(callback) {
$.get('https://jsonplaceholder.typicode.com/todos/1', function (data) {
callback(data);
});
}
CodePen: http://codepen.io/anon/pen/grKoKd?editors=0012
PS:
Jak chcesz to mogę pokazać też przykład z promisami i generatorami, ale to powinno Ci starczyć na początek - mniej eleganckie i imo mniej czytelne, ale koncepcyjnie prostsze.