VS2008中的变量声明警告

时间:2010-03-09 09:07:58

标签: javascript

VS2008中的以下代码为我提供了“已定义变量”警告:

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

警告在第二个var a = ...上发出。为了解决这个警告我做了:

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

但这是正确的方法吗?

谢谢,

AJ

3 个答案:

答案 0 :(得分:4)

是的,这是正确的方法。 javascript中没有块范围;只有功能范围和全球范围。

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

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

作为旁注,这也是为什么不鼓励for (var i = 0; ...)支持var i; for (i = 0; ...)的原因,以避免同一函数中的两个连续循环都试图声明变量i

答案 1 :(得分:1)

这取决于你之后如何使用这些变量。

如果它们与同一个物体有关,那么这是正确的方法。

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

答案 2 :(得分:0)

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