公式ツールのソースの一部を抜き出そうとして、挙動が不明だったので調べてみた。
V1=1 'グローバル変数
? "V1=" + STR$(V1) 'V1=1
DEF F1 '関数定義より前に変数定義
? "F1.V1=" + STR$(V1)
V1=10
? "F1.V1=" + STR$(V1)
END
DEF F2 '関数定義より前に変数定義がないのでローカル変数確定?
? "F2.V2=" + STR$(V2)
V2=20
? "F2.V2=" + STR$(V2)
END
V2=2 'グローバル変数
? "V2=" + STR$(V2) 'V2=2
F1
? "V1=" + STR$(V1) 'V1=1
F2
? "V2=" + STR$(V2) 'V2=2
F3 '変数定義前に呼び出してみる グローバル変数として動作?
'関数定義は後でも良い!
? "V3=" + STR$(V3) 'V3=30
V3=3 'グローバル変数
? "V3=" + STR$(V3)
F3 'グローバル変数として動作!
'関数定義は後ろでも良いが、この挙動がややこしい
DEF F3
? "F3.V3=" + STR$(V3)
V3=30
? "F3.V3=" + STR$(V3)
END
こんな感じで、関数定義の位置と、グローバルな変数の定義位置を変えて実行してみた。
V1=1
V2=2
F1.V1=1 'グローバル
F1.V1=10
V1=10
F2.V2=0 'ローカル!
F2.V2=20
V2=2
F3.V3=0 'グローバル?
F3.V3=30
V3=30 'グローバル動作だった模様
V3=3
F3.V3=3 'グローバル
F3.V3=30
V3=30
関数の定義時点(呼び出し時点ではない)での同名のグローバル変数の有無で挙動が変わっている模様。
関数定義自体は呼び出しより後にもかけるのでややこしい。
取り急ぎ、メモまで。