Tôi đã kiểm tra vị trí của các khai báo biến trong VB.NET không quan trọng, ngoại trừ phạm vi, (đối với this question) và tôi nghĩ tôi nên kiểm tra xem điều gì sẽ xảy ra khi chúng được "dỡ bỏ" vào một đóng. Tôi đã không đọc spec, nhưng tôi không thể giải thích những kết quả này:Tại sao không phải tất cả các biến này được xử lý theo cùng một cách?
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
Các kết quả trên:
0, 0, 0, 0, 0
1, 1, 0, 1, 0
inner4
là thiết lập lại mỗi lần có ý nghĩa, như sẽ tất cả hoặc không có khác innerX
, nhưng tại sao chỉ inner2
?!
Call Sub() làm gì chính xác? – Ahmad
@ AhmadAl-Mutawa Công bằng đủ câu hỏi. Một phiên bản mở rộng là 'Dim closure = Sub() ... End Sub: closure()' và tôi đã thử nghiệm nó và kết quả là như nhau. –
Tôi nghĩ rằng 'inner3' là cái thú vị hơn là' inner2'. Tôi nghĩ rằng nó phải là 0. –