[英]Javascript global variable scope issue
我遇到了Java的一个奇怪的范围问题(请参阅JSFiddle ):
var someGlobal = 3;
function someF() {
// undefined issue
alert(someGlobal);
var someGlobal = 5;
// Displays 5
alert(someGlobal);
}
function someF2() {
// Displays 3, why?
alert(someGlobal);
}
someF();
someF2();
为什么Javascript不会在someF2()
引发未定义的问题? 为什么someF2()
可以访问someGlobal
,而someF()
无法访问? 如何确保可以在函数中访问全局变量?
备注:
在这两种情况下,这些函数都以调用alert(someglobal)
,为什么一个函数抛出未定义的问题,而另一个却没有抛出?
someF
创建一个名为someGlobal
的新(局部作用域)变量(该变量屏蔽全局someGlobal
)并为其分配值。 它不会触及全局someGlobal
(尽管无法访问它,因为在作用域中存在另一个具有相同名称的变量)。
var
语句悬挂,所以someGlobal
被屏蔽所有的someF
(不仅仅是后var
语句)。 直到分配值之前,本地someGlobal
的值才是undefined
。
someF2
访问原始的( someGlobal
)全局someGlobal
。
由于您要声明具有相同名称的局部变量。 因此,它将值分配给局部变量。 只需从someF()中的var someGlobal中删除var,就可以了。
var someGlobal = 3;
function someF() {
// undefined issue
alert(someGlobal);
someGlobal = 5; // <-- orignially var someGlobal = 5
// Displays 5
alert(someGlobal);
}
function someF2() {
// Should display 5 now
alert(someGlobal);
}
someF();
someF2();
someF2显示3,因为它仍然是 3。
在someF()中,创建一个新变量,该变量恰好具有与someGlobal相同的名称。 这对原始的someGlobal并没有任何作用,它只是在本地创建一个新变量来使someF函数在该函数结束时消失。
因此,您具有局部变量(例如,在someF中使用var创建)和全局变量。
这是一个使用this
的示例,该示例如何在someF
内同时使用局部变量和全局变量。
var someGlobal = 3;
function someF() {
// Displays 3
alert(someGlobal);
this.someGlobal = 5;
someGlobal = 5;
// Displays 5
alert(this.someGlobal);
}
function someF2() {
// Displays 5
alert(someGlobal);
}
someF();
someF2();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.