2014-02-13 45 views
0

环顾四周后,我仍然不太清楚这一点。在Javascript中重新定义变量

function() { 
    var a = 'foo'; 
    a = 'bar'; 
} 

我试图在这里更新变量的值。由于该变量已经用“var”声明,我的第二行只更新变量,还是它也使它全局?

+0

不,它只会更新变量值。 – KunJ

回答

2

当你assing值的变量,如果该变量是在当前块/范围内定义的JavaScript将检查。

如果是,那么它将更新该变量。如果没有,那么它会检查它的父块。 并且这种情况持续下去,直到它找到在全局空间中声明的变量。

在你的情况下,它会更新函数中的var a。

如果在全局空间中找不到变量,它将创建一个新变量,从而污染全局名称空间。

+1

谢谢 - 这给了我答案,但也给了我一个想法,为什么它这样工作:) –

3

它只更新变量。

一次使用var,任何地方在函数中,都会声明它是一个局部变量。

1

它将更新变量值,而不是全局变量。为了使全球性的,声明它之外的功能:

var a = 'foo'; 
function() { 
    a = 'bar'; 
} 
0

你的第二个变量'bar'必须是a的新值。然后,这个范围仅适用于该功能,不能与其他功能或外部呼叫一起使用。