请参见下面的代码。将两个文件放在同一目录中,然后从PS ISE运行Form1.ps1
如您所见,(本地)变量$localVar
在事件处理程序$button2_Click
中定义。因此,我假设{/ {1}}在$localVar
的范围之外/将不存在,其范围由定义事件处理程序的花括号定义。
但是,正如您所看到的,我使用$button2_Click
的内容将$localVar
加载到函数$textbox2.Text
中。当您单击fA
按钮时,两个文本框都会显示Test
这是怎么回事?为什么从$localVar
内部访问$button2_Click
的{{1}}?
Form1.ps1
$localVar
Form1.designer.ps1
fA
答案 0 :(得分:3)
函数fA
会看到您的变量,因为它在创建$localVar
的脚本块的 child 范围内运行-这是PowerShell的常规行为,而不是特定的到ISE。
当您使用$localVar = ...
创建变量时,它在以下意义上是 local :
在相同范围内可见且可直接修改,但在任何 parent 范围内均不可见。
可见,但不能在此处直接修改。
$private:
作用域修饰符来防止子作用域看到变量。$localVar = ...
)中创建的变量(仅按名称),则您将创建一个 new (局部变量),在 current 范围内,它遮盖了原始变量。Set-Variable -Scope
或范围修改器,例如$script:
(请参见下面的链接)。有关更多信息,请参见:
this answer的最后一部分,提供了简要摘要。
答案 1 :(得分:0)
您好,因此在ISE中,您具有Powershell选项卡和脚本选项卡。
Powershell选项卡就像运行单个Powershell控制台一样。该powershell选项卡中的每个Script选项卡都在使用该控制台。因此,如果您在一个脚本中定义
$Hello = "TEST"
然后在ise中运行它。然后,在您运行的同一Powershell标签的另一个脚本标签中
$ Hello
输出为“ TEST”
这称为范围。基本上代码可以看到什么变量。 在Powershell实例中创建的所有变量始终可以在该实例的其余部分中访问
因此,让我们更深入地研究一下示例
function fA
{
$textbox2.Text = $localVar
}
$button2_Click =
{
$localVar = "123"
$textbox1.Text = $localVar
fA
}
$ localVar是第一次单击创建的。范围将从此继续到它之后创建的任何内容。因此调用FA,并将$ localvar携带到FA范围。 Textbox1和2显示123。但是,让我们展示一下它还有范围,而不是全局。
function TB1
{
$localVar = "456"
$textbox1.Text = $localVar # Will output 456
}
function TB2{
$textbox2.Text = $localVar # Will output 123
}
$button2_Click =
{
$localVar = "123"
TB1
TB2
fA
}
第一次创建的$ localVar 。传递给第一个函数$ localvar 仍为 123 ,但在该函数中,其更改为 456 。离开后,转到第二个函数,该函数的$ Localvar 将等于 123 。 函数中更改的变量不会影响其父级(即调用方 button2_click
)中的变量