質問: calc_ave(data); //dataを渡す & [59, 39, 100, 2, 15, 40, 84, 97];が展開された状態。 // 平均値を書き出し console.log(ave); //ここに書くと「54.5」上ではundefined...... ``` 御教授のほどお願いいたします。
回答: 変数が参照される順番の問題です。 ``` let data = [59, 39, 100, 2, 15, 40, 84, 97]; let ave; // 平均値を定義 **1番目** **↑ ここで変数aveがあると定義** ** この時点では関数は呼び出されません ** ** 呼び出すためには calc_ave(引数)とする必要があります。** function calc_ave(data) { //平均値を計算する関数 let total = 0; //ローカル定義 for(let i = 0; i < data.length; i++) { //繰り返し処理 total = total + data[i]; } let ave = total / data.length; //繰り返し処理が終わったら平均値の計算 console.log(ave); // **4番目** return ave; } console.log(ave); //undefinedと出力される **2番目** **↑ ここではまだ変数aveは let ave; のままで何も定義されていない。のでundefined ** // 関数calc_aveを実行する ave = calc_ave(data); **3番目** **↑ここで初めて、変数ave は引数dataをもつ関数であると定義され** ** calc_ave(data); が呼び出されています。** // 平均値を書き出し console.log(ave); // **5番目** **変数ave は引数dataをもつ関数であると定義されているため 54.5と表示** ```