変数のスコープ

変数の作成時、現在のコンテキストがスコープとなります。つまり、現在のスコープ、またはそれよりも広範囲にあるものは可視状態となります。スコープの最大範囲はモジュールです。

Dim newVar = 12

以下のスコープはルーチンです。

Function myRoutine()
    Dim newVar = 12
End Function

sdlBasic はルーチンの内側で変数を検出したとき、ルーチンに関する変数のスコープで同名変数の有無を確認後に使用します。

Dim myVar = "module variable"     ' これはモジュールレベルで宣言されます
Function myRoutine()
   Dim myVar = "routine variable" ' これはルーチンレベルで宣言されます
   myVar = "new value"           ' ルーチン版のローカル myVar を使用
   return myVar
End Function
print myRoutine()
print myVar

そうでない場合は、モジュール変数の有無を確認後に使用します。
 
Dim myVar = "module variable" ' これはモジュールレベルで宣言されます
Function myRoutine()
   myVar = "new value"   ' モジュール版の myVar を使用
   return myVar
End Function
print myRoutine()
print myVar
 
ルーチン、またはモジュール版の変数がなければ、現在のスコープに変数を作成します。

Function myRoutine()
   myVar = "new value"      ' ルーチンのスコープ内に変数を作成
End Function
 
ルーチンのスコープにある変数はルーチンの内側に限り可視状態となるため、このようなスコープとなります。

Function myRoutine()
   myVar = 12
   print myVar   ' こちらの myVar は可視状態です
End Function

myRoutine()
print myVar  ' こちらの myVar は不可視状態です

sdlBasic による変数の作成を禁止するには Option Explicit ステートメントを使います。
 
Option Explicit の指定後は変数の使用前に宣言する必要があります。

Option Explicit
Dim newVar = "作成してください"
 
Option Explicit の指定時、 Shared キーワードにより明確な可視状態で宣言、あるいは Common (または Global) で宣言していなければ、モジュールレベルの変数はルーチンから不可視状態になります。

Option Explicit
Dim myVar = "モジュールの変数"
 
Function myFunction()
   Shared myVar
   myVar = "新しい値"
End Function
 
または:

Option Explicit
Dim Common myVar = "モジュールの変数"
 
Function myFunction()
   myVar = "新しい値"
End Function