Sendo um pouco mais preciso:
Como dito, o seu script lua pode ser encarado como uma função (mais especificamente um chunk compilado que pode ser chamado como função)
Se vc declara uma variável local top level (fora de qualquer função) em um script, então dentro desse script ela vai parecer global porque as regras de visibilidade vão permitir que as funções definidas *no mesmo script* vejam essa variável.
A coisa fica diferente quando vc tem mais de um script. Nesse caso você vai perceber que quando vc declara uma variável local em um arquivo ela não pode ser acessada em outro arquivo (ela é local ao chunk definido pelo arquivo onde foi declarada). Diferente de uma variável global de fato, que não tem a restrição de um chunk específico (lembra que ela mora na tabela _G). Isso é usado por exemplo para criar bibliotecas em lua que não poluam teu ambiente global
Ex:
mylib.lua:
----------------------------------------------------------
local mylib = {} -- mylib não é visível fora deste arquivo
function mylib.foo()
print("foo")
end
function mylib.bar()
print("bar")
end
-- As funções foram definidas dentro de mylib. Logo são inacessíveis fora deste arquivo.
-- Para dar acesso às funcionalidades vamos retornar a tabela:
return mylib
Se eu quiser usar mylib eu preciso chamar assim, por exemplo:
main.lua:
----------------------------------------------------------
local mylib = require"mylib"
mylib.foo()
Se eu der um require em "mylib.lua" sem atribuir o retorno a uma variável, as funções internas ficam inacessíveis pois estão dentro uma tabela local ao chunk compilado.
Se "mylib.lua" no caso acima for chamada com dofile e sem atribuir o valor de retorno a uma variável, então a tabela será coletada e nem vai existir para qualquer fim prático.
Resumindo:
- declaração local top level é diferente de global
- vc pode usar local top level para dar visibilidade de arquivo a uma variável (ela fica invisível fora daquele arquivo)
- variáveis globais são globais inclusive entre arquivos.
- é importante entender o conceito de chunk, as regras de escopo léxico de lua e as regras de visibilidade de variáveis.