Içamento variável - “var” com o nome da variável global na função

Eu estava praticando algum cenário e encontrei um caso:

Aqui está o violino

De acordo com a barra de fechamento, a função deve ter acesso avar x então eu esperava alertar 1 e condição falsa devido aif(!1) mas alertouundefined e a condição é verdadeira e o segundo alerta é com o valor 10.

var x = 1;
function bar() {
    alert(x);
    if (!x) {
        var x = 10;
    }
    alert(x);
}
bar();

Então, eu estou confuso por que está levando indefinido?

De acordo com a elevação em um escopo específico, você define uma variável em qualquer lugar em que ela é considerada como definida no topo sempre.

Se for devido ao efeito de elevação, ainda será necessário alertar 10 em vez de indefinido.

questionAnswers(2)

yourAnswerToTheQuestion