Preallocating arrays is often a good practice, but you can still pass them as arguments โ it doesnโt require you to use globals.
In any case, as @ericphanson pointed out above, a statement like Bโ = B * M or ๐โ = [Hermitian(M'*D*M) for D โ ๐] allocates new arrays anyway โ you are โrebindingโ the variables Bโ and ๐โ to โpointโ to new arrays in memory, not mutating them in-place. See also this discussion.
(This is not unique to Julia! If you do a = [3,4,5], then b = a, followed by a = [4,5,6] in Python or Matlab or most other languages with analogous operations, b will still be [3,4,5].)