Global variable does not have global scope

autohotkey

Solution

The documentation for global variables can be found here: https://autohotkey.com/docs/Functions.htm#Global

Global variables

To refer to an existing global variable inside a function (or create a new one), declare the variable as global prior to using it. For example:

LogToFile(TextToLog)
{
    global LogFileName
    FileAppend, %TextToLog%`n, %LogFileName%
}

I believe the concept of global, with AHK, is a bit different than in other languages. With AHK you can create a variable and use it within multiple hotkeys, and subroutines, without declaring it as global.

Gv := 0

f1::SetTimer, Action, % (on:=!on) ? (1000) : ("Off")

Action:
    Gv++
    trayTip,, % Gv
Return

f2::Msgbox, % Gv

Explaination of code:

- The F1 key toggles a timer to run the subroutine: `Action` every `1000`ms.

- `%` starts an expression.

- `on:=!on` reverses the binary value of variable `on` every time F1 is pressed.

- `?:` together is called the ternary operator.

- When on=1 delay is set to `1000`ms; when on=0 the timer is turned `Off`.

The `++` operator adds 1 to variable Gv.

Problem

``` supposedlyGlobalVariable := "blah" ARoutine() { localVariable := "asdf" MsgBox, The global variable value is %supposedlyGlobalVariable%. The local variable value is %localVariable%. } ^!X:: ;This assigns the hotkey CTRL + ALT + X to run the routine ARoutine() return ``` Run the code and the result is: ``` "The global variable value is . The local variable value is asdf." ``` The documentation states: Variable scope and declarations: With the exception of local variables in functions, all variables are global; that is, their contents may be read or altered by any part of the script. Why does my global variable not have scope within the function?

Original source