繁体   English   中英

javascript变量范围在函数混乱中

[英]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()调用之后。 那么为什么警报信息分别为10undefined

这是因为当你声明它时,你的变量会被解释器的“包含”范围“提升” 所以你的代码最终被解释为:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM