Groovy 简单的变量范围

图 5.3 描述了 time 中对象被调用的理解以及它们之间的相互引用关系。

Script 创建了一个 Closure(闭包),这个 Closure 有一个反向引用到 x,这个 x 是在闭包的声明的范围之内,Script 在 Integer 10 的对象上调用 times 方法,传递声明的闭包作为参数,换句话说,当 times 方法被执行的时候,一个引用指向堆栈中的闭包对象,times 方法使用这个引用执行闭包的 call 方法,传递了本地变量 10 给闭包,在这个特定的例子中,计数变量没有在闭包的 call 方法中被使用,在闭包的 call 方法中仅仅使用了在 Script 中的 x 变量进行工作。

通过分析,你看到闭包在声明的时候,绑定了本地变量的引用。

图 5.3 对象引用和方法调用的方案图,在脚本中一个值为 10 的 Integer 对象被使用,闭包作为参数传递给 Integer 的 times 方法,这样闭包可以被调用 10 次。