return・・・戻り値、返り値と言われます。
結果:returnは仲介人
returnの処理流れ
① var array = [1,2,3,4,5,6,7,8,9,10];
④ function abc(arrayOrg) {
// var _array = arrayOrg.concat();
⑤ for (var i =0; i < arrayOrg.length; i++) {
arrayOrg[i] *= arrayOrg[i];
}
⑥ return arrayOrg;
}
② console.log(array);
③ console.log(abc(array));
⑦ console.log(array);
出力結果:
(3) [1, 2, 3]
(3) [1, 4, 9]
(3) [1, 4, 9]
上記のサンプルコードを用意しました。
Q:returnはどこに処理結果を戻しているでしょうか?
A:console.log(abc(array)); です。
処理順を①〜⑦をコード上に記載しました。
③console.log(abc(array));
→abc関数(配列の数字を倍にする処理)処理結果をコンソール出力しようとしています。
このタイミングで初めて、abc関数が呼ばれます。
④⑤処理で配列の数字を倍にした結果出ました。
その結果を、③ console.log(abc(array));にreturn(返す)します。
つまり、console.logで呼ばれた関数の処理結果を、
console.logに渡す仲介人がreturnということです。
補足①:例えば、returnをコメントアウトに
① var array = [1,2,3,4,5,6,7,8,9,10];
④ function abc(arrayOrg) {
// var _array = arrayOrg.concat();
⑤ for (var i =0; i < arrayOrg.length; i++) {
arrayOrg[i] *= arrayOrg[i];
}
⑥ // return arrayOrg;
}
② console.log(array);
③ console.log(abc(array));
⑦ console.log(array);
//出力結果:
(3) [1, 2, 3]
undefined
(3) [1, 4, 9]
retrunをコメントアウトにしてみると、③ではabc関数処理が実行されますが、
コンソール出力結果は、undefinedが返ってきます。
補足②:⑦の出力結果は、意図しない。
②⑦は、同じ元の配列(①)を呼び出していますが、 ⑦は、③と同じ出力結果になっています。関数型プログラミングでは、元の配列を書き換える行為は良くないです。
concat()を使って、配列のコピーを作成した上で、そのコピー配列の値で処理を実行して
処理結果を③に返しているだけです。そのため、元の配列は書き換えられずに済みました。
① var array = [1,2,3,4,5,6,7,8,9,10];
④ function abc(arrayOrg) {
var _array = arrayOrg.concat();
⑤ for (var i =0; i < _array.length; i++) {
_array[i] *= _array[i];
}
⑥ // return _array;
}
② console.log(array);
③ console.log(abc(array));
⑦ console.log(array);
//出力結果:
(3) [1, 2, 3]
undefined
(3) [1, 4, 9]