变量提升 - 函数中具有全局变量名称的"var"

Zah*_*med 1 javascript scope hoisting

我正在练习一些场景并找到一个案例:

这是小提琴

根据关闭栏功能应该有访问权限,var x因此我预计会发出警报1并且条件因为if(!1)但是它被警告undefined并且状态变为真,而第二次警报的值为10.

var x = 1;
function bar() {
    alert(x);
    if (!x) {
        var x = 10;
    }
    alert(x);
}
bar();
Run Code Online (Sandbox Code Playgroud)

所以我很困惑为什么它会提示未定义?

根据特定范围内的提升,您可以在任何位置始终定义变量.

如果是由于提升效应,它仍然必须提醒10而不是未定义.

Que*_*tin 5

提升导致变量在函数中的任何位置声明,未定义.

在第一行bar,因为var x在函数的第3行,全局x被屏蔽,你看到本地x(undefined因为它还没有给出一个值).

在第3行bar,你有x = 10定义变量.这没有悬挂.

在第5行,您提醒它,现在已定义它.

上面的维恩图