JavaScriptではローカル変数のスコープの仕組みがC++やJavaの感覚とは違うようなのでメモ。
if文やfor文にブロックスコープは無い
ブロックの外側からでも内側の変数にアクセスできる。
ブロックの外側からアクセスできる
for(var i=0; i<10; i++){
var hoge = 1234;
}
document.write(hoge); //表示:1234
if文やfor文だけではなく、関数以外の他の{}で囲まれたブロックにも同じことが言える。
変数宣言より前でも扱える
ローカル変数はその関数内の全ての場所で有効になる。
もし関数の真ん中で変数宣言をしていても
関数の先頭からその変数にアクセスできる。
function test(){
i = 10;
var i;
document.write(i); //表示:10
}
関数内で行われた変数の宣言は
全て関数の先頭に移動させられるといった感じ。
これが
function test(){
document.write("Hello World !!");
var xx = 1234;
var yy = 555;
for(var i=0; i<10; i++){
var sum = xx+yy+i;
}
}
こうなる感じ
function test(){
var xx;
var yy;
var i;
var sum;
document.write("Hello World !!");
xx = 1234;
yy = 555;
for(i=0; i<10; i++){
sum = xx+yy+i;
}
}