and referenced it by a local variable in another local script and tried changing the table:
local spectators = _G.spectators
table.insert(spectators, player.Name)
However, the global variable _G.spectators did not change since I believe the local variable did not store a reference to it but a copy of it. This is not the case with globals on server scripts; assigning a global table to a local variable and changing it will work as the local variable stores a reference to it and not a copy of it.
Is there anyway to make globals have the same behavior on the client has well? Thanks.
_G only works on the Server since that is global while a LocalScript functions on the Local Player, Because of that, _G.spectators will be nil according to LocalScripts
with ModuleScripts, Both Server and Client can access it
This is not true. Global variables work on both the client and server. Not just the server. It’s a matter of race condition.
If your script runs before the global variable is created, then it will be nil. To circumvent this, make sure the script that creates the global variable runs before the other scripts that use it.
Global variables are seriously bad to practise, and I’d advise you to use module scripts instead. They’re faster, easier to work with, have organizational value, and can be reused.
The global variable works fine and isn’t nil, it’s just that I want to be able to use a local variable to refer to (not store) a global variable so that I don’t have to spell out _G.spectate all the time.