全局变量功能更改无效

vik*_*ata 1 powershell global-variables

我只是试过这段代码:

$m=2
function f
{
    $m=3
}
f
$m
Run Code Online (Sandbox Code Playgroud)

我希望该函数f将更$m改为3。但是实际输出仍然是2。为什么?$m是全局变量,在内部不有效f吗?

Dar*_*te1 5

不,恐怕PowerShell并非以这种方式设计。您必须进行思考scopes,有关本主题的更多信息,请阅读有关范围的PowerShell帮助或Get-Help about_scopes在PowerShell ISE /控制台中键入。

简短的答案是,如果要更改全局范围内的变量,则应处理全局范围:

$Number = 2

Function Foo {
    $Global:Number = 3
}
Foo
$Number
Run Code Online (Sandbox Code Playgroud)

Function除非您明确将其定义为Script或,否则在函数内部创建的所有变量均不可见Global。最佳实践是将函数的结果保存在另一个变量中,因此可以在脚本作用域中使用它:

$Number = 5

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

# Now you can use the value outside the function:
"The result of the function was '$Result'"
Run Code Online (Sandbox Code Playgroud)