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(","));