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

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

最佳答案

这是(/曾经)一个旧的约定,主要是为了表明 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/

相关文章:

javascript - 如何在使用 AJAX 时使用 header ?

javascript - 圆圈内的简单弯曲文本

php - 在域/子域上设置 cookie

javascript - Angular : Error trying to diff '[object Object]' . 只允许数组和迭代

javascript - 具有平滑滚动的顶部 anchor ,不会重复

javascript - 如何设置图像对象在特定步骤后停止移动

javascript - 如何将 NodeJS Web 服务器与 Electron 集成?

javascript - tsconfig 中的 `include` 和 webpack 中的 `entry` 字段有什么区别?

javascript - Meteor:每次集合更改时如何触发命令?

javascript - AJAX之前preventDefault,表单仍然提交成功