变量作用域

在节点定义内部声明的变量仅对同一定义内的其他语句可见。此特性使你可以在多个定义内使用相同的变量名,而无需担心名称冲突。

例如,以下两个定义都使用了名为 y 的变量。但是,由于这些变量是在各自独立的节点定义内声明的,它们互不相关。你可以更改一个 y 实例的值而不影响另一个。

更准确地说,使变量成为该定义的局部变量,并不是因为它们在定义内部声明,而是因为它们在大括号 { } 内声明。通过如下在单个定义内使用大括号,你可以实现与上述两个定义相同的功能:

请注意,y 在同一定义内的两个位置声明。但是,由于第二个声明被大括号包围,它与第一个声明是分开的。请注意,即使 x 是在内层大括号之外声明的,它在内层大括号内仍然可见。

变量作用域的规则很简单。在大括号内声明的任何变量仅在大括号内可见。此外,在大括号内声明的任何变量在大括号内的所有位置都可见,包括嵌套的大括号内。以下是一个示例:

第一个 var 语句创建了变量 x 和 y,并分别将其值初始化为 1 和 2。第二个 var 语句创建了一个新的 y 实例,它与原来的 y 不同。即使第二个 var 语句将 y 的值设置为 3,原来的 y 仍然具有值 2。但是,你无法访问原来的 y,因为它已被声明为同名的新变量,遮蔽了原来的变量。请注意,x 并非如此。

在第二组大括号内,变量 x 仍然可以访问。因此,你可以更改 x 的值。当你退出嵌套大括号时,对 x 值所做的更改会保留。但是,对 y 所做的更改不会保留,因为该更改是对不同的 y 实例进行的,而更改后的 y 已不再存在。同样,在嵌套大括号内定义的变量 z 也已不再存在。

除了使用大括号来包围一组语句外,你还可以使用圆括号 ( )。圆括号和大括号的功能几乎相同。区别在于圆括号不会创建新的块作用域。例如,如果将内层大括号改为圆括号,y 的新声明将替换原来的声明:

你也可以将外层大括号替换为圆括号。如果这样做,变量 x 和 y 将被声明为全局变量。这意味着它们在节点 Result 执行完成后仍然存在,并且可以被其他函数访问。