if(true) {
tmp = 'abc';
console.log(tmp);//which should throw referenceError but not
let tmp;
console.log(tmp);
tmp = 123;
console.log(tmp);
}
このコードの結果は
abc
undefined
123
最初の console.log(tmp) がエラーをスローしないのはなぜですか?
なぜ referenceError をスローする必要があるのか
ECMAScript 2015 では、let は変数をブロックの先頭に持ち上げます。ただし、変数宣言の前にブロック内の変数を参照すると、ReferenceError が発生します。変数は、ブロックの開始から宣言が処理されるまでの「一時的なデッド ゾーン」にあります。
問題はバブルの設定だと思います。
ということはbabelのバグでしょうか? https://github.com/babel/babel.github.io/issues/826