Tcl中的变量范围

Tcl中的变量范围,tcl,scope,Tcl,Scope,我有以下基本代码: 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

我有以下基本代码:

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
程序的输出如下:

Inside: 4 5

Inside: 4 5

Inside: 4 5

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

来自:

Tcl在procs、命名空间和 […],在最顶层,是全局范围


因此,foreach循环不会创建新的作用域,所有变量的作用域都由proc确定。

花括号更像是TCL中的引号,它们本质上与作用域无关。