function f() { console.log(a); const a = 1; console.log(a); }
...actually returns this:
undefined 1
So you get partially compile-time semantics (you can't assign to a) but partially run-time semantics (a only gets its value when initialised). Simply propagating the value of a's initialiser to all places where the variable is used is wrong, as this behaviour's required by the spec.