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

时间:2018-04-25 15:30:17

标签: javascript scope global-variables local-variables

var x = 3;

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

document.write(x); // outputs 5

所以我正在运行一些测试来更好地理解本地和全球范围的概念。我认为使用关键字 x声明var会创建一个局部变量,并忽略父作用域中具有相同名称的任何变量。通过忽略,我的意思是如何在不影响其上方范围内的同一变量的情况下更改变量x。但显然我对js变量定义的理解是错误的。可以解释为什么它会如此表现?

2 个答案:

答案 0 :(得分:3)

var在函数内声明一个局部变量。对于块范围局部变量,请使用let

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

答案 1 :(得分:0)

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