As in whether to put "local" before declarations; not _G. Internally locals are indexed in arrays rather than dictionaries, so even at global scope it is more efficient to make everything local. I would love an argument otherwise
Ease of access. I would say _G. is risky to use because Roblox is finicky, but _G. would be useful if you're trying to exchange VERY simple data. If you want to get fancy with your functions, i recommend the Modules.
I think you can always use local variables and still have a functioning script. One way to, I guess, "bypass" global variables is by using an upvalue. e.g.
--script with global variable, no upvalue function abc() var = true --probably a warning because you used a global variable end function def() var = false end
--script with upvalue local var --sets it to nil; can still be set inside of inner scopes function abc() var = true --no warning since the var is local to the scope above this end function def() var = false end
You can live without global variables.