我在檢查VB.NET中變量聲明的位置並不重要,除了範圍(對於this question),我想我最好檢查一下當它們被「解除」到閉包時會發生什麼。我沒有看過的規範,但我無法解釋這些結果:爲什麼不是所有這些變量都得到相同的處理?
Dim outer As Integer
For i = 1 To 2
Dim inner As Integer
Try
Dim inner2 As Integer
Do
Dim inner3 As Integer
Call Sub()
Dim inner4 As Integer
Console.WriteLine(outer & ", " & inner & ", " & inner2 & ", " & inner3 & ", " & inner4)
outer = i
inner = i
inner2 = i
inner3 = i
inner4 = i
End Sub()
Loop Until True
Finally
End Try
Next
以上輸出:
0, 0, 0, 0, 0
1, 1, 0, 1, 0
inner4
重置每次有道理的,因爲會全或無的其他innerX
,但爲什麼只有inner2
?!
Call Sub()是做什麼的? – Ahmad
@ AhmadAl-Mutawa足夠的問題。擴展版本是'Dim closure = Sub()... End Sub:closure()'並且我測試了它,結果是一樣的。 –
我認爲'inner3'是有趣的而不是'inner2'。我認爲應該是0. –