I was checking that the position of variable declarations in VB.NET don\'t matter, except for scope, (for this question) and I thought I better check what happens when they\'re
From MSDN (emphasis mine) :
[...]what the compiler basically does, when it enters a new scope containing a lifted variable, the compiler will check to see if an instance of closure already exists; if so, the compiler will create a new instance of closure and reset the value of the variable from the previous closure.
Note that the compiler only does the above check if it detects a loop or a GoTo in the function where the closure is generated.
Link