Why not an even-harder scope?

So in short, closures (like any top-level block) capture variables because that’s the only way they can make any changes to those variables. The only case where it seems easier to capture values is when the value of that variable never changes, like for i = 1:5 push!(fns, () -> i) end.