Chunks are all about scope! You can access any variable defined outside of a scope from within the scope. Think of a scope like a one-way window in a room; from the inside you can see out, but from the outside you can't see in:
foo = 7 -- global scope do local bar = 8 -- local scope print ("foo: " .. foo) print ("bar: " .. bar) end
However, you can't access a variable local to a scope outside of that scope:
foo = 7 -- global do local bar = 8 -- local end print ("foo: " .. foo) print ("bar: " .. bar) -- error! -- bar was declared local to the do/end chunk -- it is trying to be printed at the file or -- global chunk level, where it does not exist
The same access pattern is also true for multiple nested chunks:
foo = 7 -- global do local bar = 8 -- local do local x = 9 -- nested local -- can access foo, bar and x end -- can access foo and bar end -- can only access foo