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:
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.