Tcl中的变量范围

Ric*_*eek 3 scope tcl

我有以下基本代码:

proc test {} { 
    set my_var2 3
    foreach iter {1 2 3} {
        set my_var1 4
        set my_var2 5
        puts "Inside: $my_var1 $my_var2\n"  
    }
    puts "outside $my_var1, $my_var2\n"    ;#WHY IT DOES NOT GIVE ERROR HERE!
}
test  ;#calling the function
Run Code Online (Sandbox Code Playgroud)

该程序的输出是这样的:

Inside: 4 5

Inside: 4 5

Inside: 4 5

outside 4, 5
Run Code Online (Sandbox Code Playgroud)

现在我的困惑是因为my_var1只在foreach循环的局部范围内定义为什么它的值甚至可以在循环外使用?换句话说,什么决定了Tcl中变量的范围?非常感谢您的帮助!

Erg*_*wun 15

Tcl手册:

Tcl评估由procs,namespaces [...]描述的范围内的变量,以及最顶层的全局范围.

因此,foreach循环不会创建新范围,并且所有变量都由proc确定范围.