JScript+WSHでプログラミング基礎100本ノック その72~73 自作関数とスコープ1

その72 数値や文字の変数と自作関数

コード例を実行して、変数の中身を確認して下さい

コード例

var str = "foo";
var num = 123;

WScript.echo(str);
WScript.echo(num);


function print(var1, var2){
	WScript.echo(var1);
	WScript.echo(var2);
	var1 = "bar";
	var2 = 987;
}

print(str, num);
WScript.echo(str);
WScript.echo(num);

出力結果

foo
123
foo
123
foo
123
続行するには何かキーを押してください . . .

解説

print(str, num)を実行した時点で下記が実行されるイメージ
・新しい変数var1が作成されstrの値の"foo"が格納される
・新しい変数var2が作成されnumの値の"123が格納される
・var1 = "bar"は変数var1の値を書き換えるので、strの中見は変わらない。
・var2 = 987"は変数var2の値を書き換えるので、numの中見は変わらない。

JavaScriptの記事ですが下記の記事がわかりやすかったです。

下記のようなコードでも結果は同じとなる。
print関数内の変数str,numと、関数の外の変数str,numは、名前は同じでも別物のため。

var str = "foo";
var num = 123;

WScript.echo(str);
WScript.echo(num);


function print(str, num){
	WScript.echo(str);
	WScript.echo(num);
	str = "bar";
	num = 987;
}

print(str, num);
WScript.echo(str);
WScript.echo(num);


その73 配列の変数と自作関数

コード例を実行して、変数の中身を確認して下さい

コード例

var arr = [1, 2, 3]

WScript.echo(arr.join(","));


function print(arr){
	arr.push(4);
	WScript.echo(arr.join(","));
	arr.push(5);
}

print(arr);
WScript.echo(arr.join(","));

出力結果

1,2,3
1,2,3,4
1,2,3,4,5
続行するには何かキーを押してください . . .

解説

配列と文字列/数値で挙動が異なります。
配列では配列の値への参照先がコピーされるため、関数外のarrも関数内のarrも同じ配列の実体を見ることになります。そのため、どちらかのarrで値を変えると、もう一方のarrから見ても値が変わって見えます。

また、下記のような例(print(arr)をprint(test)に変更)でも結果は同じです。

var arr = [1, 2, 3]

WScript.echo(arr.join(","));


function print(test){
	arr.push(4);
	WScript.echo(test.join(","));
	arr.push(5);
}

print(arr);
WScript.echo(arr.join(","));


いいなと思ったら応援しよう!