Javascript 局部变量覆盖全局变量?

Javascript local variable is overriding global variable?

var x = 3;

if(1==1){
    if(2==2){
        var x= 5;       
    }
}

document.write(x); // outputs 5

所以我 运行 进行了一些测试以更好地理解本地和全局范围的概念。我认为用 关键字 var 声明 x 会创建一个局部变量并忽略父作用域中具有相同名称的任何变量。忽略,我的意思是我如何更改变量 x 而不会影响其上方范围内的相同变量。但是显然我对js变量定义的理解是错误的。能否解释一下为什么会这样?

var 在函数内部声明了一个局部变量。对于块作用域局部变量,使用 let.

var x = 3;
if(1==1){
    if(2==2){
        let x = 5;
    }
}
console.log(x); // prints 3

大括号 ({...}) 不会在 JavaScript 中为 var 创建作用域。因此,当您在 {...} 侧声明具有相同名称 (x) 的任何变量 (x) 时,它不会创建任何新变量,但实际上会覆盖先前声明的变量。