groovy的变量作用域规则和java类似

  1. 在方法内部定义的变量在外部是不可见的

  2.  对groovy脚本来说,用def定义的变量对binding.variables.变量名 不可见。没有def等任何定义的可被binding.variable.变量名 所访问。

  3. 在脚本代码块中定义的变量是可见的

    

void testVarScope(){
    a = 111
    def b = 222
}
println a
println b

//块内定义,不使用def,全局可见
if(true){
    def email = "sky@gmail.com"
    //email = "sky@gmail.com"
    println "in code block email=$email"
}
println "out of block email=$email"

//没有用def定义
num = 5
println binding.variables.num == 5
//用def定义
def name = "sky"
println binding.variables.name

运行结果:
in code block email=sky@gmail.com
in code block email=sky@gmail.com
age = 30
true
null