The box is mutable, thatâ€™s the point of the wrapper for captured variables that can change:

```
julia> accumulator(n=0) = (d=0) -> n += d
accumulator (generic function with 2 methods)
julia> a = accumulator()
(::#381) (generic function with 2 methods)
julia> a()
0
julia> a(1)
1
julia> a(-3)
-2
julia> a.n
Core.Box(-2)
julia> a.n.contents
-2
julia> a.n.contents = 3
3
julia> a()
3
```

If the captured binding is not mutable then you cannot change it. Well, not officially, but you can change it by poking around in memory, but this definitely seems like asking for trouble:

```
julia> adder(a) = b -> a + b
adder (generic function with 1 method)
julia> a = adder(3)
(::#385) (generic function with 1 method)
julia> a(4)
7
julia> a.a
3
julia> unsafe_load(convert(Ptr{Int}, pointer_from_objref(a)))
3
julia> unsafe_store!(convert(Ptr{Int}, pointer_from_objref(a)), 7)
Ptr{Int64} @0x0000000107c8bb00
julia> a(4)
11
```

Although it does happen to work in this case.