函数中更改的全局变量无效

Global variable changed in function not effective

我刚试过这段代码:

$m=2
function f
{
    $m=3
}
f
$m

我预计函数 f 会将 $m 更改为 3。但实际输出仍然是 2。为什么? $m是一个全局变量,在f里面不是有效吗?

不,恐怕 PowerShell 不是那样设计的。您必须考虑 scopes,有关此主题的更多信息,请阅读 PowerShell 帮助 about scopes 或在您的 PowerShell ISE/Console.

中键入 Get-Help about_scopes

简短的回答是,如果你想改变一个在全局范围内的变量,你应该解决全局范围:

$Number = 2

Function Foo {
    $Global:Number = 3
}
Foo
$Number

Function 内部创建的所有变量在函数外部不可见,除非您明确将它们定义为 ScriptGlobal。最好将函数的 result 保存在另一个变量中,这样您就可以在脚本范围内使用它:

$Number = 5

Function Foo {
     $Number * 10
}
$Result = Foo

# Now you can use the value outside the function:
"The result of the function was '$Result'"