# Gosub

跳转到指定的标签继续执行, 直到遇到 Return.

    Gosub, Label

## 参数

Label(标签)

  跳转的目标标签, 热键标签或热字串标签, 这样会执行 Label 下的命令, 直到遇到 Return 或 Exit. "Return" 会让脚本返回到 Gosub 后的首个命令恢复执行. "Exit" 终止当前线程.

## 备注

和几乎其他所有命令的参数一样, Label 可以为变量引用(例如 %MyLabel%), 此时将使用变量中的名称作为跳转的目标. 然而, 性能会稍微降低, 因为每次都必须 "查找" 目标标签名而不是只在脚本首次加载时查找一次.

使用类似 %MyLabel% 的动态标签时, 如果目标标签不存在则会显示错误对话框. 要避免此问题, 请预先调用 IsLabel(). 例如:

    if IsLabel(VarContainingLabelName)
        Gosub %VarContainingLabelName%

尽管 Gosub 可用于简单, 普通用途的子程序, 不过对于更复杂的情况请考虑使用函数.

## 相关

Return, 函数, IsLabel(), 区块, Loop, Goto, A_ThisLabel

## 示例

本例执行如下:

1. 跳转到名为 "Label1" 的标签.
2. 显示消息 "The Label1 subroutine is now running."
3. 返回到紧接 Gosub 之后的行.
4. 显示消息 "The Label1 subroutine has returned (it is finished)."
5. 结束自动执行部分.

    Gosub, Label1
    MsgBox, The Label1 subroutine has returned (it is finished).
    return

    Label1:
    MsgBox, The Label1 subroutine is now running.
    return

dftg