var a;
if (true) {
a = 5;
function a() {}
a = 0;
console.log(a)
}
console.log(a)
上記のコードを見たところ、関数は{}で宣言されています。0 0と表示されると思いますが、0 5と表示されます。
これはあなたの質問に答えますか?ES6のブロックレベル関数の正確なセマンティクスは何ですか?
—
Jonas Wilms
厳密モードでは、ログに記録し
—
特定のパフォーマンス
0 undefinedます。
@certainPerformanceはよく説明できます
—
Jonas Wilms
a = 5が、ブロックが残っていることについては説明できません。だまされたベルギによると、function a巻き上げられます。
関数宣言に到達すると、ローカルスコープのブロック変数が外部ブロックにコピーされるように見えます。
—
Jonas Wilms