2010-03-09 46 views
0

在VS2008下面的代码给了我一个“变量已经被定义”警告:变量声明警告在VS2008

if (someVar) { 
    var a = 1; 
} 
else { 
    var a = 2; 
} 

警告后第二var a = ...给出。为了根治这一警告我做:

var a; 
if (someVar) { 
    a = 1; 
} 
else { 
    a = 2; 
} 

但是,这是做了正确的方法是什么?

感谢,

AJ

回答

4

是的,这是做了正确的道路。在javascript中没有块范围;只有功能范围和全球范围。

,你也可以给使用匿名函数,每个“块”的功能范围,虽然它不是在这种情况下非常实用:

if (someVar) { 
    (function() { 
    var a = 1; 
    })(); 
} 
else { 
    (function() { 
    var a = 2; 
    })(); 
} 

作为一个方面说明,这也是为什么for (var i = 0; ...)赞成var i; for (i = 0; ...)气馁,以避免同一函数中的两个连续循环都尝试声明变量i

+0

很好的解释。 – OregonGhost 2010-03-09 09:14:11

+0

感谢您的详细解答。 – 2010-03-09 09:58:40

1

这取决于您以后如何使用这些变量。

如果它们涉及同一个对象,那么这是正确的方法。

如果它们涉及不同的对象,那么我会重命名这些变量,因为这样可以防止将来出现维护问题。

0

无论哪种方式都是完全有效和正确的(两个示例都确保使用var关键字声明该变量),但通常最佳做法是在当前代码块的顶部声明变量,如第二个示例中所示。