VS2008中的以下代码为我提供了“已定义变量”警告:
if (someVar) {
var a = 1;
}
else {
var a = 2;
}
警告在第二个var a = ...
上发出。为了解决这个警告我做了:
var a;
if (someVar) {
a = 1;
}
else {
a = 2;
}
但这是正确的方法吗?
谢谢,
AJ
答案 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
关键字声明变量),但通常最佳做法是在当前代码块的顶部声明变量,就像在第二个例子。