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- 的必要条件每个循环,如果是这样,为什么?
最佳答案
这是(/曾经)一个旧的约定,主要是为了表明 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 改变了这一点,它介绍了更常见的 block 级作用域。使用 let
时,变量仅在循环内部可用:
function foo() {
for (let i = 19; i > 0; --i) {
console.log(typeof i); // number
}
console.log(typeof i); // undefined
}
关于javascript - Javascript for-each 循环中当前元素的变量是否需要在循环外定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29612490/