[英]Javascript Global vs Local Scope
我目前正在尝试了解Javascript在全局范围还是局部范围方面的有趣观点。
我的问题是,为什么以下返回undefined
?
var a = 100;
function local() {
if (false) {
var a = 50;
}
alert(a);
}
另外,我运行了这个:
var a = 100;
function local() {
alert(a);
}
结果是惊人的:100。
keyword, that we can use with Javascript? 有什么方法可以指定何时要从全局范围获取变量,例如可以与Javascript一起使用的PHP 关键字?
因为吊装 。
这意味着将每个变量声明都弹出到函数顶部,因此运行的实际代码为:
var a = 100;
function local(){
var a;
if (false)
a = 50;
alert(a);
}
它与全局VS无关。 本地的,你只需躲在外a
变量与内a
变量。
有什么方法可以指定何时要从全局范围获取变量,例如可以与Javascript一起使用的PHP全局关键字?
没有
关于注释中的问题“如果if条件失败(我故意这样做),我想恢复使用全局变量,该怎么办?” :
您可以使用eval
:
var a = 100;
function local() {
if (false) {
eval('var a = 50;');
}
alert(a);
}
但是你不应该!
JavaScript具有功能范围,而不是块范围(与许多其他编程语言一样)。 这意味着无论var
语句出现在何处(在您的情况下,if分支甚至都没有执行),它都会在函数的本地范围内声明变量a
。 它在全局变量中隐藏a
变量,但是由于没有赋值,因此它返回undefined
。
有什么方法可以指定何时要从全局范围获取变量,例如可以与Javascript一起使用的PHP全局关键字?
您可以将变量作为全局对象的属性(浏览器环境中的window
)进行访问:
var a = 100; // global
function loc() {
var a = 50;
alert(window.a); // 100
alert(a); // 50
}
loc();
但是,您几乎不会使用它。 通常应避免使用全局变量,并且在名称冲突的情况下,您应该简单地重命名本地变量(至少出于可读性和可维护性)。
我知道,如果使用var在函数内部定义了变量,则它将具有Local Scope 。
我也知道任何函数都可以轻松访问Global变量。
当我在浏览器的控制台中测试以下内容时,第一个输出是undefined 。
这意味着函数nwf()无法访问全局变量nw1
为了避免出现这种情况,请不要在任何函数的内部和外部重新声明和/或初始化任何具有相同名称的变量,就像以下情况一样:
var nw1 = 1; // var creates global scope outside function function nwf() { alert(nw1); var nw1 = 2; // var creates LOCAL scope inside function alert(nw1); }; nwf();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.