我确实读过the docs regarding scope,但是我似乎无法解释以下内容。
考虑以下代码:
# Function - increment global variable, append to global string? ...
function test() {
$g_num++
Write-Host $g_num
$g_str = $g_str + "X"
Write-Host $g_str
}
#===========================================================
# Init global integer and string ...
$g_num = 5
$g_str = "STRING: "
# Call our function 3 times ...
test
test
test
Write-Host "After function calls:"
Write-Host $g_num
Write-Host $g_str
上面的代码在执行时会产生以下结果:
6 STRING: X 6 STRING: X 6 STRING: X After function calls: 5 STRING:
在第一次调用函数test()
时,全局整数变量似乎按预期方式增加了一个(值从5变为6),并且全局字符串再次附加了“ X”如预期的那样。
但是,在接下来的两次调用“ test”函数时,变量值不会改变。此外,调用完成后,变量将具有其原始值。
很明显,我丢失了一些东西-我认为(显然是错误的)在任何函数外部声明的变量都具有全局作用域-但相反,它们“似乎是全局的”,而不是?
有人可以解释这种行为吗?