下記のコード(完結しているためbodyの中身のみ抽出)を実行すると、inputの中身とそのvalueがコンソール画面に表示されますが、両者のvalueが合いません。具体的には先に出力される方のvalueは初期値のままで、後の方は変更後のvalueになります。

通常、valueの取得では

.value

を付けるので問題ありませんが、当然range自体も変わると思っていました。そこで、以下2点の疑問が生じ、調べてはみましたがそれに関する詳細を見つけられませんでした。

疑問

  • rangeに表示される値はrange.valueとは異なる格納方法のようだが、rangeのどこに格納されているのか
  • そもそもrangeやrange.valueはどのような構造(?)で格納されているのか

以上、ご回答お願いします。

<input type="range" min="0" max="100" step="0.01" value="100" id="range" />
<script>
  (function() {
    var range = document.getElementById("range");
    range.addEventListener("change",  function() {
      console.log(range);
      console.log(range.value);
    });
  })();
</script>