Javascript局部变量是否覆盖全局变量?
所以我运行了一些测试来更好地理解局部和全局范围的概念。我认为用关键字Javascript局部变量是否覆盖全局变量?,javascript,scope,global-variables,local-variables,Javascript,Scope,Global Variables,Local Variables,所以我运行了一些测试来更好地理解局部和全局范围的概念。我认为用关键字var声明x会创建一个局部变量,并忽略父范围中具有相同名称的任何变量。所谓忽略,是指如何更改变量x,而不影响其上方范围内的同一变量。但显然我对js变量定义的理解是错误的。能否解释一下它为什么会这样做?var在函数中声明了一个局部变量。对于块作用域局部变量,使用let var x = 3; if(1==1){ if(2==2){ var x= 5; } } document.wri
var
声明x
会创建一个局部变量,并忽略父范围中具有相同名称的任何变量。所谓忽略,是指如何更改变量x
,而不影响其上方范围内的同一变量。但显然我对js变量定义的理解是错误的。能否解释一下它为什么会这样做?var
在函数中声明了一个局部变量。对于块作用域局部变量,使用let
var x = 3;
if(1==1){
if(2==2){
var x= 5;
}
}
document.write(x); // outputs 5
var
在函数中声明局部变量。对于块作用域局部变量,使用let
var x = 3;
if(1==1){
if(2==2){
var x= 5;
}
}
document.write(x); // outputs 5
大括号(
{…}
)不会在JavaScript中为var
创建作用域。因此,当您在{…}
侧声明具有相同名称(x
)的任何变量(x
)时,它不会创建任何新变量,而是实际覆盖先前声明的变量。花括号({…}
)不会在JavaScript中为var
创建范围。因此,当您在{…}
侧声明具有相同名称(x
)的任何变量(x
)时,它不会创建任何新变量,而是实际重写先前声明的变量。您的理解是正确的,但由于您位于if内部而不是函数内部,您的x
和if
具有相同的作用域条件,而像for
或这样的循环在JS中不创建自己的作用域。您的理解是正确的,但由于您位于if内部而不在函数内部,所以您的x
和if
具有相同的作用域条件,而像for
或while
这样的循环不会在JS中创建自己的作用域