这并不总是一个好主意。这取决于你在做什么。当他们说没有必要声明"top level" 变量时,他们的意思是这并不重要。它在函数内部很重要。考虑以下示例:
varOne = 1; varTwo = 2; varThree = 3; // undeclared
function lameFunc(){
var varOne = 'Something'; // does no affect varOne at the top level
return varOne;
}
同:
var varOne = 1, varTwo = 2, varThree = 3; // declared
function lameFunc(){
var varOne = 'Something'; // does no affect varOne at the top level
return varOne;
}
当然,使用关键字var 更容易查看变量,并且由于"top level" 没有不利影响,因此建议使用。
请注意,当我更改 lameFunc() 时,无论哪种方式,你都会影响更高的杠杆 var。
function lameFunc(){
/* varOne is effected at the higher level whether or not `var` is declared
above as in `varOne = 1` or `var varOne = 1` */
varOne = 'Something';
return varOne;
}
此外,如果您在事件之外声明一个变量,例如var someInputVal = document.getElementById('someInput').value;,那么假设您想要获取元素的 onclick 值。您可能希望在Element.onclick = function(){/* in here */} 中声明var,因为在您单击Element 之前输入可能已更改。在处理您的事件的函数之外声明var someInput = document.getElementById('someInput'); 可能是可以的,如果元素没有变为undefined,那么您可以访问类似:
var doc = document, bod = doc.body;
function E(e){
return doc.getElementById(e);
}
var someInput = E('someInput'), someInputVal = someInput.value;
E('clickButton').onclick = function(){
console.log(someInputVal); // will not be what document.getElementById('someInput').value is if it was changed before clicking
var declared = someInput.value;
console.log(declared);
}