3

这似乎是一个简单的问题,但我找不到这个答案..

例如,如果我有以下对象:

  var a = {
    foo : "FOO",
    bar : "BAR"
  }

现在,如果我想列出对象的属性,我应该执行以下操作:

  for( var b in a ) {
    // do something
  }

或者,我可以这样做:

  for( b in a ) {
    // do something
  }

但是,这些方法之间有什么区别?为什么在 for in 循环中使用“var”或为什么不使用“var”?

4

3 回答 3

7

如果您使用之前未声明的变量而没有添加var,则创建一个全局变量。

function scope() {
    a = "hi";      // global
    var b = "ho";  // local
}

但是,两者没有区别

for (var b in a) { /* .. */ }

var b;
for (b in a) { /* .. */ }
于 2012-08-13T09:00:31.370 回答
3

如果没有 var,b则成为全局变量,然后能够与b可能导致错误或意外行为的另一个定义进行交互。

例如,

function example1(){
 for( b in a ){
  example2();
  //now when b comes back, it will reference the last item from example2,
  //essentially skipping the entire interior of a.
 }
}

function example2(){
 for( b in a ){
  //access a[b]
 }
}
于 2012-08-13T09:01:04.933 回答
1

如果您不键入var,则将声明一个全局变量,因此如果您以后不打算使用它,那将没有意义,您将在不需要它的情况下消耗内存

于 2012-08-13T09:01:25.457 回答