我写了这段代码:
$var = 0
$array= @(1,2,3)
function changeData(){
$var=1
$array[0]=100
}
changeData
Write-host $var
Write-host $array
当我跑步时,我得到:
0
100 2 3
我理解为什么变量$var
仍为0。
我们无法修改父作用域中的变量,除非我们添加global
关键字,如下所示:
function changeData(){
$global:var=1
$array[0]=100
}
但是,我无法理解为什么$array
已更改为@(100,2,3)
。
$array
也在父作用域中。但不知何故,它可以在函数changeData()
中进行更改。
你能告诉我为什么会出现这种差异吗?
答案 0 :(得分:0)
执行:$array[0] = 100
时,它等同于向对象调用此方法:$array.SetValue(100,0)
。在对象上调用方法不受范围的限制,因此这将生效。
请注意,调用后$array
不会发生变化,当然,在changeData()
内执行此操作也不会:$array = @(4, 5, 6)