Stworzyłeś dokładniej mówią tzw. funkcję natychmiastową(Immediately-invoked function expression), czyli taką, która od razu zostaje wywołana.
Funkcje możesz tworzyć na kilka sposobów, ale tutaj domyślam się, że chciałeś zrobić coś takiego:
var c = 0,
a = function () { return c += 1; };
c; //0
a(); //1
c; //1
a(); //2
c; //2
Przy takim zapisie tworzysz tzw. wyrażenie funkcyjne, czyli ogólnie mówiąc funkcję przypisaną do zmiennej a. Nie jest to taki sam zapis jak:
function a () { return c += 1; }
Jedną z najważniejszych różnic jest miejsce faktycznego zdefiniowania funkcji a. W JS pierwszeństwo mają definicje funkcji, a dopiero później deklarowane są zmienne (tzw. hoisting).
Twoje rozwiązanie z tzw. funkcją natychmiastową jest często wykorzystywane po to, aby nie zaśmiecać globalnego zakresu zmiennymi, a jednocześnie dzięki tzw. domknięciom można bardzo ładnie ograniczać ilość zmiennych globalnych, w wielu przypadkach nawet tylko do jednej zmiennej.