我遇到的JavaScript(看到一个奇怪的范围问题的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
。
既然你声明一个局部变量具有相同的名称。 因此,它的值赋给局部变量。 只是删除从VAR someGlobal在someF()的变种,它应该是罚款。
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)和全球性的。
下面是如何使用这两种内局部和全局变量的例子someF
通过使用this
。
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();