Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript局部变量是否覆盖全局变量?_Javascript_Scope_Global Variables_Local Variables - Fatal编程技术网

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中创建自己的作用域