JSプログラミング最初の一歩 JavaScript

変数の有効範囲

変数には有効範囲があります。それは関数内で宣言した変数なのか、それとも関数外で宣言した変数なのか、による違いです。

関数内で宣言した変数は関数の中でのみ有効です。関数の外で宣言した変数と中で宣言した変数は同じ名前であっても別の変数です。
例えば、以下のプログラムを見てください。

var num = 10;
test();
alert(num);

function test()
{
	var num = 20;
}

最初に変数 num に 10を代入し、関数testを呼び出しています。testの中では変数numに20を代入しているように見えます。しかし、これは最初のnumとは別の変数です。なぜなら関数内で var を使って宣言しているからです。varを使って関数の中で宣言した変数は関数の中でのみ有効です。ですので、test関数を実行したときに作られた変数num は test関数が実行されて完了した時点で消えてしまいます。
alertで表示されるのは、最初にnum=10とした変数ということになります。

では、以下のプログラムは何と表示されるでしょうか?

var num = 10;
test();
alert(num);

function test()
{
	num = 20;
}

今度は関数 test 内で var を付けていません。この場合、変数は最初にvar宣言した num だとみなされます。そのため、値は20が表示されます。


問題11-2:
関数 test 内で変数 num に1を足し込むことにする。関数 test を3回呼び出し、numを表示すると、3と表示されるようなプログラムを作成しよう。
なお、使用する変数は必要な場合 var で宣言をすること。