what is the difference between declaring a variable with or without self?

What’s the difference between this:
[lua]function GM:InitPostEntity()
self.CombineTickets = -1
self.HumanTickets = -1

self.CComs = -1
self.HComs = -1

end[/lua]
and this:
[lua]function GM:InitPostEntity()
CombineTickets = -1
HumanTickets = -1

CComs = -1
HComs = -1

end[/lua]
What are some reasons to use self?
(in init.lua)

Your first example stores the values within the gamemode instance’s table. You can only retrieve those values with the gamemode object available (either as self in a GM method, or the GAMEMODE global).
Your second example stores the values in the global table (_G).

You can argue the first example is better because no addons are going to be doing the same as you.

So I would have to do
[lua]GAMEMODE:CombineTickets[/lua]
to get the value of CombineTickets?

GAMEMODE.CombineTickets or self.CombineTickets if self is the gamemode at that point in the code.