Javascript for-each循环中当前元素的变量是否需要在循环外定义?

时间:2015-04-13 18:30:06

标签: javascript

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循环的必要条件,如果是这样,为什么?

1 个答案:

答案 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
}