[英]javascript variable scope in function confusion
这里有2个javascript函数
var a = 10;
function abcd()
{
alert(a);//alerts 10
a=5;
}
另一个代码就是这个
var a = 10;
function abcd()
{
alert(a);//alerts undefined
var a=5;
}
在两个函数赋值/声明中都是在alert()调用之后。 那么为什么警报信息分别为10
和undefined
?
这是因为当你声明它时,你的变量会被解释器的“包含”范围“提升” 。 所以你的代码最终被解释为:
function abcd()
{
var a;
alert(a); //alerts undefined
a = 5;
}
为了避免这种混淆,您可以遵循一些将保持原样的实践,例如在函数开头声明本地作用域(即,在函数作用域内使用关键字var
声明的变量)变量。
请注意,正如您可以从文章中读到的那样,嵌套函数也会发生这种情况。
在第一个代码段中只有一个变量。 函数外部的a
和函数内部的a
都指向全局变量。
在第二个代码狙击手中,有两个变量名为a
,一个在函数外部,一个在函数内部。 由于变量具有函数作用域,函数内部的局部变量存在于整个函数中,而不仅仅是在它定义的行之后。 声明被提升到函数的顶部,而赋值仍然发生在写入的位置。
我不完全确定这一点,但我想我可以告诉你原因:
当解析第二个函数的源代码时,浏览器将知道将在此函数中声明变量“a”。
'var'告诉它'a'应该是函数范围内的新变量(不是全局变量)。 如果没有'var'(就像在第一个函数中那样),它将使用已在全局范围内声明的变量'a'。
因此,当它开始执行该函数时,它为它分配内存(以及即将在函数中声明的所有其他变量)。 因为'a'仅在'alert()'函数访问'a'时定义但尚未初始化,所以它返回'undefined'。
这里有一些棘手的范围话题:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.