# 変数

TJS2 の変数は var キーワードで指定します。TJS2 では変数を宣言しなければ使うことができません。
var キーワードの書式は以下の通りです。
`var 変数名;
`
変数名は , (カンマ)で区切って複数個指定することもできます。変数に初期値が必要な場合は、
`var 変数名 = 初期値;
`
の書式で変数に初期値を代入することができます。
`例:
var variable=0;
var var2=variable+2;
var var3="this is var3.";
var var1,var2,var3;
var a=0,b=1,c=3;
`
変数は宣言時に型を指定する必要はありません。代入されたものの型になります。また、計算途中や文脈では、自動的に型が変換されます。

# 変数名

変数名として有効なのはすべての識別子です。
`例:
var ampan;
var 123a; // 数字が先頭にきているので NG
var function; // function は予約語なので NG
var function1; // 予約語を含むが予約語そのものではないので OK
var 変数その一; // いわゆる全角文字も使用可能
`

# 変数の２重宣言

同じ名前の変数を二回以上宣言してもエラーになりません。ただし、二回目以降の宣言で初期値が指定された場合、その初期値が変数に代入されます。２回目以降の宣言で初期値が与えられなかった場合は、void になります。
`例:
var a=0;
var a; // 二回目の宣言 (エラーにならなく、a は void になる)
var a=-1; // 三回目の宣言 (エラーにならないが a には -1 が代入される)
`

# 変数のスコープ

{ } (ブロック) で囲まれた部分で宣言された変数は、そのブロック内のみで有効な変数、つまりローカル変数になります。
また、C 言語と異なり、変数が宣言できる位置に制限はありません。
`例:
while(t--)
{
var ratio=t/all; // 変数 'ratio' を宣言
setRatio(ratio);
}
// ここに制御が移ったとき、'ratio' は削除されている
var test; // ここでも変数を宣言することができる
`
また、ブロック外の変数と同じ名前の変数がブロック内で宣言された場合、そのブロック内では、新しく宣言された変数のみにアクセスできます。
`例:
var ratio=0;
if(flag)
{
var ratio; // ブロック外で宣言されている変数と同名の変数
ratio=buf.position / buf.totalTime; // ブロック内の ratio にのみアクセスできる
setRatio(ratio);
}
// ブロックを抜けるとブロック内の ratio は削除されるが、ブロック外の ratio はそのまま
ratio=-1;
`
Note
すべてのスコープの外側 (これをグローバルスコープと呼びます) で var で変数を宣言すると、その変数はグローバルオブジェクトのメンバとなります。