javascriptのconsole.logの挙動で、どうしても理解できないことがありました。
console.logの実行地点では何もデータが入っていないにもかかわらず、全ての実行結果が返ってきます。
解決したいこと
-
- 下記ソースにある、console.logの(1)の挙動について
forでデータを挿入する前ですが、既に実行後の結果が出力されます。
上から順に実行されるはずなので、この挙動が理解できません。
-
- 中身のデータの上書きについて。
forの中の処理で、dataset.yearが今回は2回実行されます。
1度目は2016が挿入され、2度目2017が上書きで挿入されるはずです。
ですが結果はどちらも2017と表示されます。
arrSet[0]['year']に2016、dataset[1]['year']に2017が挿入されるはずで、
ここは上書きされないと思うのですが…なぜでしょう。
###該当のソースコード
javascript
1let array = ['2016','2017']; 2let res = getData(array); 3 4function getData(array) { 5 6 let arrSet = []; 7 let dataset = {}; 8 9 console.log(arrSet);// (1) 10 console.log(arrSet[0]);// (2) 11 12 for (key in array) { 13 dataset.year = array[key]; 14 arrSet.push(dataset); 15 } 16 console.log(arrSet[0]);// (3) 17 return arrSet; 18}
console.log結果
- (1) … 全てのデータが出力される。
- (2) … この地点では存在しないので
undefined
。ここは理解できる。 - (3) … 実行後なので出力される。ここも理解できる。
###試したこと(3つほど
- 1.解決したい事の2番目の、正常処理方法。
→for内の1番上に、dataset = {};
を追記し初期化すると、正常に表示されます。
ですが初期化しない際に正常処理が行われない理由は不明のままです。
- 2.chromeのデバッグツールでforの部分にブレークポイントを設置。
→止まった時点で(1)の中身を確認すると当然ですが何もデータは入っていません。
そのまま処理を流しても、console.logの中にデータが入ることはありませんでした。
- 3.上記デバッグを再度実施。
→ブレークポイントで止まっても(1)のconsole.logの中身を確認せず、そのまま処理を流した後に(1)の中身を確認すると、全てのデータが入っていました。
↑つまりconsole.logは実行ポイントではなく、確認時点で表示内容が変わる(ことがある?)
###補足情報
- chromeの最新環境で実行。
最後に
console.logという初歩的なところかもしれませんが、
この挙動についてご存知の方がいらっしゃいましたらご教示いただけると幸いです。
何卒、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/19 00:22