プチコン3号は変換速度やメモリ効率重視のため1パスコンパイラによる仮想マシンコードへの変換を実行直前に行っています。 そのため配列変数の宣言はその変数が実際に使われるよりも前の行で行う必要があります。 これは実際に実行される順番の早さは関係なくプログラム上に記述している順番で決まります。 そのためおかしいというよりはすごく素直な仕様だと思います。 自作関数内で使用している変数が宣言していない場合はローカル変数になるかグローバル変数になるかもこれさえ分かれば簡単です。