JS for-each循环(http://www.w3schools.com/js/js_loop_for.asp)的W3Schools示例是
var person = {fname:"John", lname:"Doe", age:25};
var text = "";
var x;
for (x in person) {
text += person[x];
}
我想知道为什么在循环之外定义x
的任何特殊原因如果它仅在该特定示例中的循环内使用,或者如果这是定义for-each循环的必要条件,如果是这样,为什么?
答案 0 :(得分:1)
这是(/是)旧约定,主要是为了表明x
不存在于循环内部。
不需要在函数顶部声明变量,并且不同的样式工具会不同地鼓励/阻止这些变量。在一个地方组合变量声明可能很方便,但可能会增加声明和使用之间的距离(通常认为是坏事)。
在JS中,var
declaration在函数范围内工作,因此变量被提升到最近函数的顶部并在函数期间存活。参见:
function foo() {
for (var i = 19; i > 0; --i) {
console.log(typeof i); // number
}
console.log(typeof i); // number
}
foo();

因为整个函数都可以访问变量,所以它在函数的开头声明(C用于要求它)。
ES6使用let
statement对此进行了更改,这引入了更常见的块级范围。使用let
,变量仅在循环内可用:
function foo() {
for (let i = 19; i > 0; --i) {
console.log(typeof i); // number
}
console.log(typeof i); // undefined
}