在JavaScript中何时使用var

63

也许是一个相当简单的问题。

在JavaScript中应该在哪里使用 var 关键字?在我看来,使用它或不使用它似乎有着相同的效果(但当然我还在学习这门语言)。

例如,对我来说下面这两个代码片段看起来一样:

(function(){
  var a = "mundo"
  alert("Hola, " + a )
})()
并且
(function(){
  a = "mundo"
  alert("Hola, " + a )
})()

当然,必须有一个更复杂的示例来展示差异。

4个回答

96

使用var时,你在当前作用域中实例化一个变量。这也会防止在当前作用域内访问具有相同名称的更高作用域中的变量。

在第一个示例中,'a'在函数作用域内被实例化和设置。在第二个示例中,由于缺少var,'a'在函数作用域之外被设置。

使用var

var a = "A"
(function(){
  var a = "B"
  alert(a) //B
})()

alert(a); //A

没有使用 var:

var a = "A";
(function(){
  a = "B"
  alert(a) //B
})()

alert(a) //B

你是说 var 声明的变量总是这样吗? - OscarRyz
1
确切地说,var 声明了当前作用域中的变量。 - Bodman
@SNag,您的编辑将进入审核队列,因此重要的是您进行足够大的编辑,以免浪费审核人员的时间。我非常不确定这个编辑是否达到了这个标准,但我不想直接拒绝它(因为您说它很重要)。我并不是想窃取这个编辑。对于看起来像这样的情况,我表示歉意。 - Veedrac
@SNag 我已经查看了你提出的一些建议性的修改,虽然其中一些很棒但其他的还需要等到你有足够的声望来跳过编辑队列(尽管我个人认为那个修改应该只是作为评论留下,等待作者进行更改)。而有一些真的不应该发生,因为它们实际上并没有任何改进。 - Veedrac
让我们在聊天中继续这个讨论 - Veedrac

16

使用 var :

var a = 'world';   
myfunction = function(){
  var a = "mundo"
  alert("Hola, " + a )
}

myfunction();  //alerts 'hola, mundo'
alert(a);  //alerts 'world';

不使用 var:

var a = 'world';   
myfunction = function(){
  a = "mundo"
  alert("Hola, " + a )
}

myfunction();  //alerts 'hola, mundo'
alert(a);  //alerts 'mundo'

6

我认为你需要重新了解一下JavaScript对象作用域。

使用“var”关键字将在最顶层(全局)作用域中放置您的变量。这意味着,如果一个函数使用相同的变量,“var”变量声明将覆盖函数中的(非var)变量... JavaScript作用域


1
如果在函数内未使用变量,JS 将会在函数外寻找该变量,所以如果你在不同的函数中使用相同的变量名可能会发生冲突。定义新变量时最好总是使用 var。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接