我有全局变量,并希望在函数中使用它们。
我不会在函数中使用同名的局部变量!
# Global variables:
$Var1 = @{ .. }
$Var2 = @( .. )
function testing{
$Var1.keyX = "kjhkjh"
$Var2[2] = 6.89768
}
我这样做并且有效,但它是安全还是我必须使用以下内容?
$Global:Var1.keyX = "kjhkjh"
答案 0 :(得分:21)
在你的函数中,你正在修改哈希表的内容,所以不需要使用$ global,除非你的函数(或函数和全局范围之间的函数调用者)碰巧有局部变量$ Var1和$ Var2( BTW你不能错过$
)。如果这是你自己的代码,那么我就说保持原样。但是,如果您的代码允许其他人#39;调用你的函数的代码,然后我会使用$global:Var1
说明符来确保你访问全局变量,而不是无意中访问调用你的函数的函数中的同名变量。
在PowerShell中了解动态范围的另一个方面是,当您为函数中的变量赋值并且该变量恰好是全局变量时,例如:
$someGlobal = 7
function foo { $someGlobal = 42; $someGlobal }
foo
$someGlobal
PowerShell将执行" copy-on-write"对函数内的变量$ someGlobal进行操作。如果您的意图是真正修改全局,那么您将使用$global:
说明符:
$someGlobal = 7
function foo { $global:someGlobal = 42; $someGlobal }
foo
$someGlobal